0

我使用^[0-9()- ]+$正则表达式来验证电话号码。基本上我只想允许数字、连字符和两个大括号,即 ( )

我在模型级别属性中添加了这个(在 MVC3.0 中)。在给出一个有效的字符串(比如 5299912548)后,它接受了,但在视图中它的抛出错误为“解析”^[0-9()-]+$"-[xy] 范围以相反的顺序。 “。

使用的正则表达式有问题还是其他 MVC3 的东西有问题?

4

2 回答 2

3
^[0-9()\- ]+$

您需要转义连字符 - 否则它是一个范围指示器。

你也可以这样做:

^[0-9() -]+$

连字符和空格已交换。正则表达式中的连字符位置以前一直困扰着我,有时我需要在这些情况下重新调整位置。

如果有人能告诉我为什么会这样,我将不胜感激。

但这将解决这个问题。

编辑:

研究揭示了答案。一些正则表达式允许连字符出现在第一个或最后一个,并且仍然按字面意思解释。

于 2012-08-16T12:36:25.990 回答
0

问题出在这部分:

[/-.] 

这意味着“从 '/' 到 '.' 的字符范围” - 但 '/' 在 '.' 之后 在 Unicode 中,所以范围没有意义。

如果您希望它表示“斜线、破折号或句点”,那么您需要:

[/\-.]

换句话说,您需要避开破折号。请注意,如果这是在常规 C# 字符串文字中,您还需要执行另一级别的转义:

string pattern = "[/\\-.]";

使用逐字字符串文字意味着您不需要转义反斜杠:

string pattern = @"[/\-.]";

或者,您可以将破折​​号放在开头:

[-/.]

或结束:

[/.-]
于 2012-08-16T12:45:03.057 回答