【问题标题】:Model state invalid when using custom RegexAttribute使用自定义 RegexAttribute 时模型状态无效
【发布时间】:2015-03-22 21:57:24
【问题描述】:

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

这个regex 在 MVC 应用程序的自定义属性中使用。它总是使模型无效。虽然它可以在在线工具中准确运行。

我正在尝试验证电话号码是这种格式:+(55) 7564 6242

【问题讨论】:

  • IIRC 属性自动锚定模式(即像将其包装在^...$ 中)。这会影响你的结果吗?如果没有,请发布属性定义。

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


【解决方案1】:

你可以这样使用。

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

【讨论】:

    【解决方案2】:

    您没有指定语言,但我猜是从 Attribute 和 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})

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-09
      • 2011-08-14
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多