【问题标题】:How can I allow just one type of string pattern in a number pattern, while replacing the first 3 numbers to string - regex如何在数字模式中只允许一种类型的字符串模式,同时将前 3 个数字替换为字符串 - 正则表达式
【发布时间】:2015-02-24 11:09:19
【问题描述】:

我正在 MVC 模型中编写一个数字模式。我需要两种模式:

12345-1234567-1DDD45-1234567-1

digits 可以是 0-9 之间的任意数字。但只有 3D 可以代替图案的开始。 DDD 应该是固定的。

这是我的代码:

[Required]
[Display(Name = "NIC #")]
[RegularExpression(@"^[[D]{3}[0-9]{2}]|[[0-9]{5}]-[0-9]{7}-[0-9]{1}$", ErrorMessage = "Must be a valid NIC Number")]
public string NIC { get; set; }

任何帮助将不胜感激。

【问题讨论】:

    标签: c# regex asp.net-mvc


    【解决方案1】:

    你可以使用这个正则表达式:

    @"^(?:D{3}|\d{3})\d{2}-\d{7}-\d$"
    
    • [D\d]{3} 将匹配 3 个 D 或输入开头的 3 个数字。
    • \d{2} 将匹配 2 位数字
    • - 将匹配文字连字符
    • \d{7} 将匹配 7 位数字
    • - 将匹配文字连字符
    • \d$ 将匹配行结束前的单个数字。

    【讨论】:

    • Anubhava,感谢您的解决方案,但您的代码接受了 D2D2D45-1234567-1 之类的模式。所以我在下面对其进行了调整。
    • 对于像这样的小改动 OP 可以离开 cmets 并且改变这对我来说不会超过几分钟。 (请参阅更新的更短的正则表达式)。
    【解决方案2】:

    感谢阿努巴夫的帮助。我调整了我的正则表达式以满足我的要求。 这就是我所做的。

    @"^(DDD|\d\d\d)\d{2}-\d{7}-\d$"
    
    • (DDD|\d\d\d) 返回正好 3 个 D 或正好 3 个数字。
    • \d{2} 后跟正好 2 位数字。
    • - 匹配文字连字符
    • \d{7} 匹配 7 位数字
    • - 匹配文字连字符
    • \d$ 匹配行尾前的最后一个数字。

    生成的输出要么像12345-1234567-1,要么像DDD45-1234567-1

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      相关资源
      最近更新 更多