javascript版本
/*** 车牌号验证(后半部分不能出现I和O,避免与0和1混淆)* @param vehicleNumber* @returns {*}*/export function isVehicleNumber(vehicleNumber) { var xxreg=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DABCEFGHJK]$)|([DABCEFGHJK][A-HJ-NP-Z0-9][0-9]{4}$))/; // 2021年新能源车牌不止有DF var creg=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/; if(vehicleNumber.length == 7){ return creg.test(vehicleNumber); } else if(vehicleNumber.length == 8){ return xxreg.test(vehicleNumber); } else{ return false; }}
java版本
final static Pattern p = Pattern.compile("^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[a-zA-Z](([DF]((?![IO])[a-zA-Z0-9](?![IO]))[0-9]{4})|([0-9]{5}[DF]))|[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1})$");public static void main(String[] args) { String carNo = "京A123435"; if (carNo.length() == 7 || carNo.length() == 8) { Matcher m = p.matcher(carNo); if (!m.matches()) { System.out.println(false); return; } System.out.println(true); } else { System.out.println(false); }}