C# 使用自定义RegeAttribute时模型状态无效
正则表达式不在代码中工作,但在工具中工作:C# 使用自定义RegeAttribute时模型状态无效,c#,regex,asp.net-mvc,enterprise-library,C#,Regex,Asp.net Mvc,Enterprise Library,正则表达式不在代码中工作,但在工具中工作: \+?\(([0-9]{2})\([.-]?)([0-9]{4})\2([0-9]{4}) 此regex用于MVC应用程序中的自定义属性。它总是使模型失效。虽然它在在线工具中工作准确 我正在尝试验证电话号码的格式:+(55)7564 6242您没有指定语言,但从属性和MVC我猜是C 您必须为源代码转义正则表达式字符串 原始图案 \+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4}) 常规C#(或Java)字
\+?\(([0-9]{2})\([.-]?)([0-9]{4})\2([0-9]{4})
此regex
用于MVC应用程序中的自定义属性。它总是使模型失效。虽然它在在线工具中工作准确
我正在尝试验证电话号码的格式:
+(55)7564 6242
您没有指定语言,但从属性和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})";
print(pattern);
将输出(注意缺少的\\
s)
+(([0-9]{2}))([.-]?)([0-9]{4})2([0-9]{4})
你可以这样用
public partial class xxx
{
[RegularExpression(@"^\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4})", ErrorMessage = "")]
public string MobileNumber { get; set; }
}
IIRC属性自动锚定模式(例如,将其包装在
^
..$
中)。这会影响你的结果吗?如果没有,请发布属性定义。
public partial class xxx
{
[RegularExpression(@"^\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4})", ErrorMessage = "")]
public string MobileNumber { get; set; }
}