我使用^[0-9()- ]+$
正则表达式来验证电话号码。基本上我只想允许数字、连字符和两个大括号,即 ( )。
我在模型级别属性中添加了这个(在 MVC3.0 中)。在给出一个有效的字符串(比如 5299912548)后,它接受了,但在视图中它的抛出错误为“解析”^[0-9()-]+$"-[xy] 范围以相反的顺序。 “。
使用的正则表达式有问题还是其他 MVC3 的东西有问题?
我使用^[0-9()- ]+$
正则表达式来验证电话号码。基本上我只想允许数字、连字符和两个大括号,即 ( )。
我在模型级别属性中添加了这个(在 MVC3.0 中)。在给出一个有效的字符串(比如 5299912548)后,它接受了,但在视图中它的抛出错误为“解析”^[0-9()-]+$"-[xy] 范围以相反的顺序。 “。
使用的正则表达式有问题还是其他 MVC3 的东西有问题?
^[0-9()\- ]+$
您需要转义连字符 - 否则它是一个范围指示器。
你也可以这样做:
^[0-9() -]+$
连字符和空格已交换。正则表达式中的连字符位置以前一直困扰着我,有时我需要在这些情况下重新调整位置。
如果有人能告诉我为什么会这样,我将不胜感激。
但这将解决这个问题。
编辑:
研究揭示了答案。一些正则表达式允许连字符出现在第一个或最后一个,并且仍然按字面意思解释。
问题出在这部分:
[/-.]
这意味着“从 '/' 到 '.' 的字符范围” - 但 '/' 在 '.' 之后 在 Unicode 中,所以范围没有意义。
如果您希望它表示“斜线、破折号或句点”,那么您需要:
[/\-.]
换句话说,您需要避开破折号。请注意,如果这是在常规 C# 字符串文字中,您还需要执行另一级别的转义:
string pattern = "[/\\-.]";
使用逐字字符串文字意味着您不需要转义反斜杠:
string pattern = @"[/\-.]";
或者,您可以将破折号放在开头:
[-/.]
或结束:
[/.-]