使用自定义RegexAttribute时模型状态无效

时间:2015-03-22 21:57:24

标签: c# regex asp.net-mvc enterprise-library

正则表达式不在代码中工作但在工具中工作: \+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4})

regex用于MVC应用程序中的自定义属性。它总是使模型无效的地方。虽然它在在线工具中可以正常工作。

我正在尝试验证电话号码是否为以下格式:+(55) 7564 6242

2 个答案:

答案 0 :(得分:1)

你可以这样使用。

public partial class xxx
{
[RegularExpression(@"^\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4})", ErrorMessage = "")]
public string MobileNumber { get; set; }
}

答案 1 :(得分:0)

你没有指定语言,但是从属性和MVC我猜C#。

您必须为源代码转义正则表达式字符串。

原始图案

\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4})

常规C#(或Java)字符串

string pattern = "\\+?\\(?([0-9]{2})\\)?([ .-]?)([0-9]{4})\\2([0-9]{4})"

C#逐字(对于正则表达式/硬编码的Windows路径更好)

string pattern = @"\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4})"

有关详细信息,请参阅C# String Literals

不逃避
未转义的字符串将导致正则表达式引擎无法识别的模式(请参阅下面的输出),因为\\在源语言字符串中是特殊的。它可能会逃避这样的事情

 string pattern = "\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4})";
 print(pattern);
输出

(注意缺少\\ s)

  

+?(?([0-9] {2}))?([.-]?)([0-9] {4})2([0-9] {4})