VIN RegEx Pre 1980 - PullRequest
       12

VIN RegEx Pre 1980

0 голосов
/ 30 марта 2012

Я пытаюсь использовать RegEx, который поймает любой VIN до 1980-х (Идентификационные номера транспортных средств).От Anythign до 1980-х не требуется 17 цифр, и они могут содержать «O» и «U».

На этом сайте заявлено, что у него есть RegEx (также объясняются правила VIN): 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 символов.приходится ... Это VIN просто неисправен или RegEx?

Ответы [ 2 ]

2 голосов
/ 31 марта 2012

Прежде всего, регулярное выражение, которое вы нашли, нуждается в некоторой работе.Я думаю, что автор не понимает, что означают запятые внутри классов символов, с одной стороны.Если вы игнорируете ненужные запятые и группы захвата, вы можете упростить все до следующего:

/^([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

... и далее, в зависимости от вашего движка регулярных выражений:

/^((?!.{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 (например) будет.Как я уже сказал в своем комментарии выше, я думаю, что нам нужна дополнительная информация о конкретных совпадениях, которые вы ищете.Для меня это звучит так, как будто вы опубликовали регулярное выражение для соответствия post -1980 VIN, а не VIN до 1980 года.Либо это, либо BCG23253, в конце концов, не является действительным VIN.

2 голосов
/ 30 марта 2012

Что RegEx трудно читать, но посмотрите на это после оператора или:

(([a-h,A-H,j-z,J-Z,0-9]{6,11})(\d{5})))$

... говорит "между 6 и 11 из предыдущей группы, за которыми следуют 5 цифр". Ваш образец VIN не соответствует этим критериям.

...