【问题标题】:Regex for Passport Number护照号码的正则表达式
【发布时间】:2017-03-31 13:43:41
【问题描述】:

我正在尝试对护照号码实施正则表达式验证。

我的要求是

  1. 长度应最少为 3 个字符,最多为 20 个字符。
  2. 不应只有 0

我尝试了下面的正则表达式

^(?!0{3,20})[a-zA-Z0-9]{3,20}$

这似乎适用于大多数情况,但如果我的文本包含 3 个或更多前导零,它似乎会失败。如'00000001'。

示例匹配

  • 101AE24 - 按预期工作
  • 00 - 未按预期工作
  • 01234 - 按预期工作
  • 00001 - 不工作(但也应该匹配)

任何帮助将不胜感激。

【问题讨论】:

  • 必须是正则表达式吗?您可以通过首先检查长度来解决此问题,然后确保您至少有以下 [A-Za-z1-9] 中的一个或多个
  • 对于长度 ^[0-9]{3,20}$ 然后检查 Convet.ToInt32(value) == 0
  • @viveknuna 字符串可以有字母字符。
  • 然后使用 [a-zA-Z0-9] simple and int.TryParse

标签: c# regex regex-negation


【解决方案1】:

这个呢?

^(?!^0+$)[a-zA-Z0-9]{3,20}$

与其说“拒绝带有 3-20 个零的值”,我们可以说“拒绝任何包含零的东西(不管长度如何,因为 20 无论如何都会失败)

【讨论】:

    【解决方案2】:

    我花了大约 5 分钟在线学习 Regex [iOS、Swift]。这是我为初学者理解的简单答案。

    对于 1 个字母和 7 位数字:

    [A-Z]{1}[0-9]{7}
    

    对于 2 个字母和 7 位数字:

    [A-Z]{2}[0-9]{7}
    

    --

    func validatePassport(from value: String?) throws {
        guard let passportNo = value, !passportNo.isEmpty else {
            throw MyError.noPassport
        }
        let PASSPORT_REG_EX = "[A-Z]{1}[0-9]{7}"
        let passport = NSPredicate(format:"SELF MATCHES %@", PASSPORT_REG_EX)
    
        if !passport.evaluate(with: passportNo) {
            throw MyError.invalidPassport
        }
    }
    

    【讨论】:

    • 护照号码也可以是数字,比如我的就是8个数字。比较好的模式是 ^(?!(0))[a-zA-Z0-9]{6,9}$ - 不能以 0 开头,并且包含 6-9 个字母数字字符。然而,我相信开头只能有 1 或 2 个字母,这将使它成为一个更复杂的模式。
    【解决方案3】:

    我在this link看到了这个表情

    ^[A-Z0-9<]{9}[0-9]{1}[A-Z]{3}[0-9]{7}[A-Z]{1}[0-9]{7}[A-Z0-9<]{14}[0-9]{2}$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-23
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多