regex - VIN 验证正则表达式

标签 regex validation

我根据 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 个字符,由任意数字和任意字母组成,IOQ 除外;它正确找到前 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/

相关文章:

python - 尝试编写一个 python 正则表达式来测试前 9 个字符是否匹配

Java转义转义序列

Javascript - 使用全局修饰符删除最后一个不起作用

java - 如何使用 SAX XML Schema Validator 的验证消息进行内部化?

php - 当数据验证失败时保留表单字段中的值

javascript - 澳大利亚电话号码验证

jquery - 从同一事件处理程序中触发 jquery 事件

python - 使用多个分隔符和条件拆分字符串

java - Spring MongoTemplate - 通过正则表达式在集合中查找

scala - 如何验证 Spark Dataframe 的内容