用javascript验证英国驾驶执照正则表达式

用javascript验证英国驾驶执照正则表达式,javascript,regex,Javascript,Regex,是否可以按照以下规则验证英国驾驶执照 数字1-5:字母A-Z或9 数字6-11:数字0-9 数字12-13:字母A-Z或9 数字14:数字0-9 数字15-16:两个字母A-Z 到目前为止,我有以下内容,但它不起作用: var regex = /^[A-Z0-9]{5}\d[0156]\d([0][1-9]|[12]\d|3[01])\d[A-Z0-9]{3}[A-Z]{2}$/ 应通过以下程序: [ 'FARME100165AB5EW', 'MAR99740614BC

是否可以按照以下规则验证英国驾驶执照

  • 数字1-5:字母A-Z或9
  • 数字6-11:数字0-9
  • 数字12-13:字母A-Z或9
  • 数字14:数字0-9
  • 数字15-16:两个字母A-Z
到目前为止,我有以下内容,但它不起作用:

var regex = /^[A-Z0-9]{5}\d[0156]\d([0][1-9]|[12]\d|3[01])\d[A-Z0-9]{3}[A-Z]{2}$/
应通过以下程序:

  [
    'FARME100165AB5EW',
    'MAR99740614BC2TL',
    'MARTI740614A92TL',
    'MARTI740614992TL',
    '99999740614992TL'
  ].forEach(drivingLicenceNumber => regex.test(drivingLicenceNumber)
只有数组的第一个元素通过

而下面的方法应该失败

  [
    '1FARM382940AZ9AZ',
    'F2ARM382940AZ9AZ',
    'FA3RM382940AZ9AZ',
    'FAR4M382940AZ9AZ',
    'FARM5382940AZ9AZ'
  ].forEach(drivingLicenceNumber => !regx.text(drivingLicenceNumber)
这应该起作用:

^[A-Z9]{5}\d{6}[A-Z9]{2}\d[A-Z]{2}$
说明:

  • [A-Z9]{5}
    数字1-5:字母A-Z或9
  • \d{6}
    第6-11位:数字0-9
  • [A-Z9]{2}
    第12-13位:字母A-Z或9
  • \d
    第14位:数字0-9
  • [A-Z]{2}
    第15-16位:两个字母A-Z
var regex=/^[A-Z9]{5}\d{6}[A-Z9]{2}\d[A-Z]{2}$$/
console.log(“全通”);
[
“FARME100165AB5EW”,
“MAR99740614BC2TL”,
“MARTI740614A92TL”,
“MARTI740614992TL”,
“999999 740614992TL”
].forEach(驾驶执照号码=>{
console.log(drivinglicenumber,regex.test(drivinglicenumber));
});  
console.log('all fail');
[
“1FARM382940AZ9AZ”,
‘F2ARM382940AZ9AZ’,
‘FA3RM382940AZ9AZ’,
“FAR4M382940AZ9AZ”,
“FARM5382940AZ9AZ”
].forEach(驾驶执照号码=>{
console.log(drivinglicenumber,regex.test(drivinglicenumber));

}); 提供的正则表达式适用于有效的英国驾驶执照,您设置的规则与此不匹配

格式为:

5个字母(姓氏的前5个字母或9s=>9s,如果姓氏长度不超过5位数,则构成其余字母)

[A-Z9]{5}

1个数字(出生十年后的第一个数字(例如1957=5))

\d

2个数字(考虑到女性的出生月份,这个数字加上额外的50,因此09将是69,12将是72),因此第一个数字只能是0,1,5或6,第二个数字可以是0到9之间的任何数字(你可以在这里更深入一些,不要得到像19这样的值,但我不介意)

[0156]

\d

2个数字(您出生月份的第几天)

([0][1-9]|[12]\d|3[01])

1个数字(出生十年后的最后一个数字(例如1957=7))

\d

2个字母/数字=>如果没有中间名,请填写您的姓名首字母(例如-Paul Simon=PS)

[A-Z9]{2}

3个字母和数字,它们是顺序中的计算机数字检查数字:

\d
然后
[A-Z]{2}

此链接解释了英国驾驶执照的确切布局

另见:

您提供的正则表达式是针对此格式进行测试的,并且将针对有效的英国驾驶执照工作,但您针对其设置的规则与正则表达式或格式不匹配


有错误吗?张贴您正在使用的相关代码块,因为regex101中的快速测试表明regex可能正在工作。(您发布的片段中缺少括号。)哪些片段没有做他们应该做的事情?我试过
'FARME100165AB5EW'
它通过了/^[A-Z0-9]{5}\d[0156]\d([0][1-9]|[12]\d |[3[01])\d[A-Z0-9]{3}[A-Z]{2}$/.测试('MAR99740614BC2TL')只有第一个通过了你的正则表达式没有多大意义<代码>[A-Z0-9]{5}
表示查找五个字母数字字符,这很好。然而,你的下一篇文章似乎应该是
\d{6}
,我不确定你想用
\d[0156]\d([0][1-9]|[12][d[3[01])\d做什么,这是问题的正确答案,但我觉得这个问题是错误的,因为在只允许9的情况下,他怎么从[A-Z0-9]开始?