一、正则解释
正则表达式:/(^[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
|