ng-pattern Vs脚本验证
ng-pattern Vs script validation
我正在使用正则表达式ng-pattern验证日期(格式为YYYY/MM/DD)。当我在UI中使用以下代码时,它工作得很好。
<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文件中使用了下面的代码:
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,我可以显示一条消息。但问题是,即使日期格式正确,它也会返回false。
我可以知道为什么regexp在ng模式下工作良好,为什么它在JS函数内不能正常工作的原因吗?
您的regex一直返回false
,因为您在使用构造函数符号(new RegExp(var)
)初始化的模式中包含了regex分隔符。
您不必使用构造函数,并且可以使用/.../
:
RegExp
: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);
然而,似乎你的正则表达式有一些问题,这里是一个固定的版本:
/^((199'd)|([2-9]'d{3}))'/(0[1-9]|1[0-2])'/(0[1-9]|[12]'d|3[01])$/
我删除了{1}
限制量词,因为它是冗余的,并从字符类[1,2]
和[0,1]
中删除了,
,因为逗号被视为文字,可能会弄乱结果。我们还可以通过删除不必要的组或将其转为非捕获来进一步增强,但这些已经是表面上的更改。
见样例:
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
来更精确地验证日期。
相关文章:
- 提交时未运行验证脚本
- Jquery表单验证脚本问题
- 如何使此表单验证脚本在返回之前循环通过整个表单部分
- jquery 验证脚本的类型错误
- 更新到以前的验证脚本(学校项目)
- 新鲜的MVC 3项目给了我奇怪的不显眼的验证脚本错误
- 我的验证脚本无法正常工作
- 将警报DIV添加到验证脚本(jquery / javascript)
- 需要帮助在没有提交按钮的情况下触发 jQueryTools 验证脚本
- 提交时未运行验证脚本
- 密码验证脚本不工作
- 选择下拉菜单的单个验证脚本
- 有什么方法可以绑定'任何'通过身份验证脚本重定向(链接/刷新等)
- 我们可以在一个文件中同时使用JavaScript和PHP表单验证脚本吗?
- Javascript迷你验证脚本
- 表单验证脚本使用正则表达式检查跨换行符的多个关键字
- 需要年份范围验证脚本或jquery
- 如何使用php身份验证脚本作为CouchDB的代理,同时仍然保持完整的REST API功能?
- Jquery表单验证脚本
- 验证脚本丢失字符