护照号码的正则表达式

Regex for Passport Number

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

我的要求是

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

我尝试使用以下正则表达式

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

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

示例匹配

如有任何帮助,我们将不胜感激。

这个呢?

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

而不是说 'reject values with 3-20 zeros',我们可以说“拒绝任何 包含零的内容(无论长度如何,因为 <3 和 >20 无论如何都会失败)

在线学习正则表达式我花了大约 5 分钟 [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
    }
}

我从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}$