实名认证时,常会用到身份证号码和车牌号码的正则表达式匹配验证。简单高效。
经过一次一次的测试,去除多种匹配的表达式,得出相对正确的正则表达式。
1.车牌号正则匹配
车牌号组成规则
1.民用常规车牌号
常规车牌号由三部分组成,仅允许以汉字开头,后面可录入六个字符,由大写英文字母和阿拉伯数字组成。如:浙A 12345
如下图:
随着车辆的增多,五位序号码已经排满,英文字母都分配或者预留给下辖县市了,市区只好再继续数字字头,不过第二位是英文字母,就是浙A-0A001排列到浙A-0Z999。
2.新军车牌
以两位为大写英文字母开头,后面以5位阿拉伯数字组成。如:BA12345。
3.最后一位为汉字的车牌
有最后一位为汉字的车牌,比如外国大使馆的车牌后面的汉字是个领字,咱们中国警察后面是个警字,挂车后面有个挂字
允许以汉字开头,后面可录入六个字符,前五位字符,由大写英文字母和阿拉伯数字组成,而最后一个字符为汉字。
汉字包括“挂”、“学”、“警”、“港”、“澳”,“领”。如:浙A1234警
4.新能源汽车车牌
新能源汽车车牌新增加两个字段D(表示纯电动)和F(表示非纯电动),小型轿车字段在前面,如:浙AD12345,浙AF12345,大型车字段在后面,如浙A12345D,浙A12345F。
新能源车牌比普通车牌号多一位。
综上:常用车牌号的正则表达式为:
regex=([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z][A-Z][DF]?[A-Z0-9]{
4}[A-Z0-9挂学警港澳领][DF]?)
由于开头两位英文字母后面四位字符的这种情况匹配错误率较高,所以舍弃了这种车牌的匹配,正则表达式为:
regex=([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][DF]?[A-Z0-9]{
4}[A-Z0-9挂学警港澳领][DF]?)
问题:
写在XML文件中的正则,C++程序读取表达式集合[]中的汉字匹配出现问题,不能准确的匹配汉字。
解决:
将集合[]改为捕获型或者非捕获型括号后,汉字使用或(|)隔离,可以正确匹配汉字。
如下:
regex=((京|津|沪|渝|冀|豫|云|辽|黑|湘|皖|鲁|新|苏|浙|赣|鄂|桂|甘|晋|蒙|陕|吉|闽|贵|粤|青|藏|川|宁|琼|使|领)