正则表达式不在代码中工作但在工具中工作:
\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4})
此regex
用于MVC应用程序中的自定义属性。它总是使模型无效的地方。虽然它在在线工具中可以正常工作。
我正在尝试验证电话号码是否为以下格式:+(55) 7564 6242
答案 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})