返回
护照号码正则表达式教程
正则表达式
2024-02-28 16:01:16
一、正则解释
正则表达式:/(^[EeKkGgDdSsPpHh]\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\d{7}$)/
- 分组 1:
^[EeKkGgDdSsPpHh]
:护照开头为 E、K、G、D、S、P、H\d{8}
:后面紧跟 8 位数字
- 分组 2:
^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))
:开头为- E 后跟一个十六进制数字
- D 或 S 后跟 E
- K 后跟 J
- M 后跟 A
- 14 或 15
\d{7}
:后面紧跟 7 位数字
二、使用场景
此正则表达式用于验证护照号码,包括香港和澳门。
三、代码示例
JavaScript
const regex = /(^[EeKkGgDdSsPpHh]\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\d{7}$)/;
const passportNumbers = ['s28233515', '141234567', '159203084', 'MA1234567', 'K25345719'];
for (const passportNumber of passportNumbers) {
console.log(`${passportNumber}: ${regex.test(passportNumber)}`);
}
Java
import java.util.regex.Pattern;
public class PassportNumberValidator {
private static final Pattern REGEX = Pattern.compile("(^[EeKkGgDdSsPpHh]\\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\\d{7}$)");
public static void main(String[] args) {
String[] passportNumbers = {"s28233515", "141234567", "159203084", "MA1234567", "K25345719"};
for (String passportNumber : passportNumbers) {
System.out.println(passportNumber + ": " + REGEX.matcher(passportNumber).matches());
}
}
}
PHP
<?php
$regex = '/(^[EeKkGgDdSsPpHh]\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\d{7}$)/';
$passportNumbers = ['s28233515', '141234567', '159203084', 'MA1234567', 'K25345719'];
foreach ($passportNumbers as $passportNumber) {
echo "$passportNumber: " . (preg_match($regex, $passportNumber) ? 'Valid' : 'Invalid') . "\n";
}
Python
import re
regex = r"(^[EeKkGgDdSsPpHh]\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\d{7}$)"
passportNumbers = ['s28233515', '141234567', '159203084', 'MA1234567', 'K25345719']
for passportNumber in passportNumbers:
print(f"{passportNumber}: {bool(re.match(regex, passportNumber))}")