ASP.NET MVC数据注释正则表达式适用于.NET,但不适用于JS

时间:2013-01-13 21:19:40

标签: javascript regex asp.net-mvc-4 data-annotations

我正在尝试在ASP.NET MVC的模型验证的RegularExpression数据注释中使用此答案https://stackoverflow.com/a/164994/4950中给出的UK Post代码正则表达式。

这是RegEx:

(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})

这在服务器端工作正常,并且在Regex英雄(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 params)。

有谁能告诉我为什么这个正则表达式在JS失败了?我认为最初它与套管有关,但添加忽略大小写选项似乎没有改变任何东西。

这似乎也不起作用:http://regexpal.com/所以必须有一些语法问题..

更新:我已经设法通过删除嵌套字符集来获得令人满意的工作。请参阅此处的工作示例:http://jsfiddle.net/Asyqh/1/

1 个答案:

答案 0 :(得分:0)

我已经设法通过删除Javascript似乎不喜欢的嵌套字符集来获得令人满意的工作。请参阅此处的工作示例:http://jsfiddle.net/Asyqh/1/

var regex = "(GIR 0AA)|((([A-Z][0-9][0-9]?)|(([A-Z][A-Z][0-9][0-9]?)|(([A-Z][0-9][A-HJKSTUW])|([A-Z][A-Z][0-9][ABEHMNPRVWXY])))) [0-9][A-Z]{2})";