使用自定义 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; }
}