使用自定义 RegexAttribute 时模型状态无效
Model state invalid when using custom RegexAttribute
正则表达式在代码中不起作用,但在工具中起作用:
\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})([0-9]{4})
此 regex
用于 MVC 应用程序中的自定义属性。它总是使模型无效的地方。虽然它在在线工具中准确运行。
我正在尝试验证 phone 号码是这种格式:+(55) 7564 6242
您没有指定语言,但从 Attribute 和 MVC 我猜是 C#。
您必须对源代码的正则表达式字符串进行转义。
原图
\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})([0-9]{4})
常规 C#(或 Java)字符串
string pattern = "\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4})"
C# verbatim(更适合正则表达式/硬编码 Windows 路径)
string pattern = @"\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})([0-9]{4})"
有关详细信息,请参阅 C# String Literals。
没有越狱
未转义的字符串会导致正则表达式引擎无法识别的模式(请参阅下面的输出),因为 \
在您的源语言字符串中很特殊。它可能会像这样逃脱它
string pattern = "\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})([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})([0-9]{4})", ErrorMessage = "")]
public string MobileNumber { get; set; }
}
正则表达式在代码中不起作用,但在工具中起作用:
\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})([0-9]{4})
此 regex
用于 MVC 应用程序中的自定义属性。它总是使模型无效的地方。虽然它在在线工具中准确运行。
我正在尝试验证 phone 号码是这种格式:+(55) 7564 6242
您没有指定语言,但从 Attribute 和 MVC 我猜是 C#。
您必须对源代码的正则表达式字符串进行转义。
原图
\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})([0-9]{4})
常规 C#(或 Java)字符串
string pattern = "\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})\2([0-9]{4})"
C# verbatim(更适合正则表达式/硬编码 Windows 路径)
string pattern = @"\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})([0-9]{4})"
有关详细信息,请参阅 C# String Literals。
没有越狱
未转义的字符串会导致正则表达式引擎无法识别的模式(请参阅下面的输出),因为 \
在您的源语言字符串中很特殊。它可能会像这样逃脱它
string pattern = "\+?\(?([0-9]{2})\)?([ .-]?)([0-9]{4})([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})([0-9]{4})", ErrorMessage = "")]
public string MobileNumber { get; set; }
}