我正在尝试使用一个RegEx,它可以捕捉任何1980年前的车辆识别码。1980年前的任何数字都不要求是17位数字,可以包含‘O’和‘U’。
这个网站声称它有一个RegEx (它还解释了车辆识别规则):http://lamptricks.blogspot.com/2012/03/vin-regex-pre-1980-and-new.html
这是RegEx:^((([a-h,A-H,j-n,J-N,p-z,P-Z,0-9]{9})([a-h,A-H,j-n,J-N,p,P,r-t,R-T,v-z,V-Z,0-9])([a-h,A-H,j-n,J-N,p-z,P-Z,0-9])(\d{6}))|(([a-h,A-H,j-z,J-Z,0-9]{6,11})(\d{5})))$
但以下VIN未通过测试:BCG23253
它的结尾是5位数字,长度为8个字符--这是RegEx所占的...是车辆识别码有问题还是RegEx有问题?
发布于 2012-03-31 05:05:08
首先,您找到的正则表达式需要一些工作。首先,我认为作者不理解逗号在字符类中的含义。如果忽略不必要的逗号和捕获组,则可以将整个过程简化为:
/^([a-hj-mp-z0-9]{9}[a-hj-mp-rtv-z0-9][a-hj-mp-z0-9]\d{6}|[a-hj-z0-9]{6,11}\d{5})$/i...and,然后根据您的正则表达式引擎:
/^((?!.{9}[su])[a-z0-9-[io]]{11}\d{6}|[a-hj-z0-9]{6,11}\d{5})$/i也就是说,您给出的数字(BCG23253)并不满足要求,因为它只有8个字符。为了满足最低要求(上面的[a-hj-z0-9]{6-11}\d{5}部分),您的输入必须是11-17个字符,以5个数字结尾,并且不包括字母I。
所以BCG23253不应该通过,但是BCGBCG23253 (例如)会通过。正如我在上面的评论中所说的,我认为我们需要关于您正在寻找的特定匹配的更多信息。在我看来,您发布的正则表达式是为匹配-1980年后的VIN而制作的,而不是1980年前的VIN。要么这样,要么BCG23253毕竟不是一个有效的车辆识别码。
发布于 2012-03-31 03:04:30
这个RegEx很难读懂,但是看看这个,在or操作符后面:
(([a-h,A-H,j-z,J-Z,0-9]{6,11})(\d{5})))$...says“介于前一组的6和11之间,后跟5位数”。您的样本VIN不符合该条件。
https://stackoverflow.com/questions/9948971
复制相似问题