C# 正则表达式在 Javascript、MVC4、自定义 RegularExpressionAttribute、IClientValidatable 中不起作用

C# Regex does not work in Javascript, MVC4, Custom RegularExpressionAttribute, IClientValidatable

提问人:Colin Bacon 提问时间:1/15/2013 最后编辑:Alan MooreColin Bacon 更新时间:1/15/2013 访问量:630

问:

我有一个自定义的正则表达式属性,它实现了 IClientValidate,以便我可以将其与不信任的验证一起使用。

当我运行它时,我在 FireBug 中出现以下错误

SyntaxError:量词
匹配无效 = new RegExp(params).exec(value);

它显然不喜欢传递给它的正则表达式,它在 C# 中是有效的。我似乎无法弄清楚我需要做什么才能让它在 JavaScript 中有效。

正则表达式是

^(?i)([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]?\s?[0-9][ABD-HJLN-UW-Z]{2})$

C# 正则表达式 ASP.NET-MVC-4 眼的 javascript 不显 现的验证

评论


答:

0赞 Jonas W 1/15/2013 #1

当我在此运行您的正则表达式时: http://regexpal.com/ 我在这部分出现错误:(?i)

Rexegpal 是一个 JavaScript 正则表达式测试器。 因此,如果你能让它在这里工作,那么你就可以在你的代码中应用它。

也许你有一些示例字符串可以尝试?

1赞 pstr 1/15/2013 #2

替换为修饰符:(?i)i
var patt=/^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]?\s?[0-9][ABD-HJLN-UW-Z]{2})$/i

1赞 Alan Moore 1/15/2013 #3

与 .NET (C#) 相比,JavaScript 正则表达式风格非常有限。它不支持的众多功能之一是 form 或 的内联修饰符。但是,由于您使用的是构造函数,因此应该能够将修饰符作为第二个参数传递:(?i)regex(?i:regex)new RegExp(params)

"^[A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]?\s?[0-9][ABD-HJLN-UW-Z]{2}$",
"i"

评论

0赞 Colin Bacon 1/15/2013
是否可以有一个正则表达式模式?我之所以问这个问题,是因为我只能将一种模式传递到我正在使用的 MVC ModelClientValidationRegexRule 方法中。
0赞 Alan Moore 1/15/2013
第二个参数只是修饰符。如果只能传递一个参数,则必须显式枚举小写字母(例如)。"^[A-PR-UWYZa-pr-uwyz0-9]..."
0赞 Colin Bacon 1/15/2013
谢谢,这就是我最后所做的。