我正在尝试在此答案https://stackoverflow.com/a/164994/4950中给出的英国邮政编码正则表达式用于 ASP.NET MVC 中的模型验证的正则表达式数据注释。
这是正则表达式:
(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})
这在服务器端运行良好,并且在正则表达式英雄(http://regexhero.net/tester/)中进行测试时,但在客户端,正则表达式似乎不起作用。
我查看了 Jquery.validate.unobtrusive 插件正在使用的代码:
$jQval.addMethod("regex", function (value, element, params) {
var match;
if (this.optional(element)) {
return true;
}
match = new RegExp(params).exec(value);
return (match && (match.index === 0) && (match[0].length === value.length));
});
并在这里复制了相同的情况:http: //jsfiddle.net/cEGsj/(我稍后添加了 gi 参数)。
谁能告诉我为什么这个正则表达式在 JS 中失败了?我最初认为这与大小写有关,但添加忽略大小写选项似乎并没有改变任何东西。
在这里似乎也不起作用:http ://regexpal.com/所以一定有一些语法问题..
更新:通过删除嵌套字符集,我设法得到了令人满意的工作。请参阅此处的工作示例:http: //jsfiddle.net/Asyqh/1/