护照号码的正则表达式
本文关键字:正则表达式 号码 | 更新日期: 2023-09-27 18:18:14
我正在尝试实现护照号码的正则表达式验证。
我的要求是
- 长度最少3个字符,最多20个字符。
- 不应该只有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}$