我根据 http://en.wikipedia.org/wiki/Vehicle_identification_number 编写了一个 VIN 验证正则表达式但当我尝试运行一些测试时,它不接受一些有效的 VIN 号码。
我的正则表达式:
^[A-HJ-NPR-Za-hj-npr-z\\d]{8}[\\dX][A-HJ-NPR-Za-hj-npr-z\\d]{2}\\d{6}$
VIN 号码不起作用:
1ftfw1et4bfc45903
WP0ZZZ99ZTS392124
VIN 号码有效:
19uya31581l000000
1hwa31aa5ae006086
(我认为问题出现在末尾的数字上,维基百科听起来好像它只会以 6 个数字结尾,而那个不起作用但有效的数字仅以 5 结尾)
任何纠正此问题的帮助将不胜感激!
最佳答案
我无法帮助您提供完美的 VIN 正则表达式 - 但我可以解释为什么这个正则表达式在您的 1ftfw1et4bfc45903 示例中失败:
^[A-HJ-NPR-Za-hj-npr-z\d]{8}[\dX][A-HJ-NPR-Za-hj-npr-z\d]{2}\d{6}$
说明:
^[A-HJ-NPR-Za-hj-npr-z\d]{8}
这允许 8 个字符,由任意数字和任意字母组成,I、O 和 Q 除外;它正确找到前 8 个字符:
1ftfw1et[\dX]
这允许 1 个字符,可以是数字或大写的 X;它正确找到下一个字符:
4[A-HJ-NPR-Za-hj-npr-z\d]{2}
这允许 2 个字符,由除 I、O 和 Q 之外的任何数字和任何字母组成;它正确找到接下来的 2 个字符:
bf\d{6}$
这正好允许 6 位数字,这就是正则表达式失败的原因;因为最后 6 个字符不全是数字:
c45903
关于regex - VIN 验证正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30314850/