首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ng-模式Vs脚本验证

ng-模式Vs脚本验证
EN

Stack Overflow用户
提问于 2015-08-04 05:59:01
回答 1查看 81关注 0票数 1

我正在使用正则表达式ng-模式验证日期(格式为YYYY/MM/DD)。当我在UI中使用下面的代码时,它运行得很好。

代码语言:javascript
复制
<input type="text" class="k-fill" ng-pattern="/((^[1]{1}[9]{1}[9]{1}\d{1})|([2-9]{1}\d{3}))\/([0]{1}[1-9]{1}|[1]{1}[0-2]{1})\/([0]{1}[1-9]{1}|[1,2]{1}\d{1}|[3]{1}[0,1]{1})$/" ng-model="Request.ExpDate" id="ExceptedDate" name="ExceptedDate" ng-readonly="true" required />

但我想验证函数内部的模式,以弹出验证消息。为了达到这个目的,我在js文件中使用了下面的代码。

代码语言:javascript
复制
 var str = Request.ExpDate;
        var x = '/((^[1]{1}[9]{1}[9]{1}\d{1})|([2-9]{1}\d{3}))\/([0]{1}[1-9]{1}|[1]{1}[0-2]{1})\/([0]{1}[1-9]{1}|[1,2]{1}\d{1}|[3]{1}[0,1]{1})$/';
        var patt = new RegExp(x);
        var res = patt.test(str); 

如果res返回false,我可以显示一条消息。但问题是,它是返回错误的每一个日期,即使是以正确的格式。

我可以知道为什么regexp在ng模式下工作得很好,为什么它在JS函数中不能正常工作吗?

EN

回答 1

Stack Overflow用户

发布于 2015-08-04 06:19:00

正则表达式总是返回false,因为在用构造函数符号(new RegExp(var))初始化的模式中包含了regex分隔符。

您不必使用构造函数,并且可以使用常规文本(以RegExp的形式)初始化/.../

代码语言:javascript
复制
var str = Request.ExpDate;
var patt = /((^[1]{1}[9]{1}[9]{1}\d{1})|([2-9]{1}\d{3}))\/([0]{1}[1-9]{1}|[1]{1}[0-2]{1})\/([0]{1}[1-9]{1}|[1,2]{1}\d{1}|[3]{1}[0,1]{1})$/;
var res = patt.test(str);

但是,您的regex似乎存在一些问题,下面是一个固定的版本:

代码语言:javascript
复制
/^((199\d)|([2-9]\d{3}))\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/

我删除了{1}限制量词,因为它是多余的,并且从字符类[1,2][0,1]中删除了,,因为逗号被当作文字处理,并且可能会破坏结果。我们还可以通过移除不必要的组群或将它们变成非捕获组来进一步加强,但这些已经是表面上的改变了。

见样本:

代码语言:javascript
复制
var str = "2992/10/31";
var patt = /^((199\d)|([2-9]\d{3}))\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/;
var res = patt.test(str);
document.write(res);

请注意,您还可以使用Date.Parse更精确地验证日期。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31801703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档