护照号码的正则表达式

本文关键字:正则表达式 号码 | 更新日期: 2023-09-27 18:18:14

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

我的要求是

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

我尝试使用下面的正则表达式

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

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

匹配

例子

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

护照号码的正则表达式

这个怎么样?

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

不要说"拒绝包含3-20个零的值",我们可以说"拒绝任何只包含零的值(无论长度如何,因为<3和>20都失败)

我花了大约5分钟的时间在线学习Regex [iOS, Swift]。这是我的一个简单的答案,便于初学者理解。

For 1 Alphabet &7位数:

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

For 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
    }
}

我从这个链接看到了这个表达式

^[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}$