提问人:Colin Bacon 提问时间:1/15/2013 最后编辑:Alan MooreColin Bacon 更新时间:1/15/2013 访问量:630
C# 正则表达式在 Javascript、MVC4、自定义 RegularExpressionAttribute、IClientValidatable 中不起作用
C# Regex does not work in Javascript, MVC4, Custom RegularExpressionAttribute, IClientValidatable
问:
我有一个自定义的正则表达式属性,它实现了 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})$
答:
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
谢谢,这就是我最后所做的。
评论