регулярное выражение для индийского номера транспортного средства в JavaScript и PHP - PullRequest
3 голосов
/ 12 марта 2010

Мне нужно регулярное выражение в Javascript, а также в PHP, для индийского автомобиля NUMBER.

Вот список условий:

(x)(y)(z)(m)(a)(b)(c)

1. (x) содержит только алфавиты длиной 2.
2. (y) может быть - или один пробел ' '.
3. (z) содержит только числа длины 2.
4. (м) может быть или , или один пробел ' '.
5. (a) должен состоять из одного или двух буквенно-цифровых символов, за которыми следует альфа. 6. (b) должно быть идентично (y).
7. (c) содержит только числа длиной 4.

Вот несколько примеров действительных номеров автомобилей:

  • RJ-14, NL-1234
  • RJ-01,4M-5874
  • RJ-07,14M-2345
  • RJ 07,3M 2345
  • RJ-07,3M-8888
  • RJ 07 4M 2345
  • RJ 07,4M 2933

и некоторые недействительные (с указанием причины):

  • RJ-07 3M 1234 (оба (y) и (b) должны быть одинаковыми).
  • RJ-07 M3-1234 ((а) должен заканчиваться алфавитом).
  • rj-07 3M-123 (длина (c) должна быть 4).

Ответы [ 3 ]

1 голос
/ 12 марта 2010

Вам не нужно решать каждую задачу с помощью регулярного выражения, вы можете легко проверить это с помощью кода. Все, кроме номера 5, просты, поэтому вы можете использовать:

^[A-Z]{2}[ \-][0-9]{2}[ ,][A-Z0-9]{2,3}[ \-][0-9]{4}$

затем проверьте символы 7 и 8 (и 9, если общая длина 14, а не 13) для условия номер 5. А также проверьте, что позиции 3 и 7 идентичны.

Код, необходимый для проверки этого старого стиля, вероятно, будет гораздо более читабельным (и поддерживаемым), чем регулярное выражение, чтобы делать то же самое.


При повторном чтении вопроса в условиях 5 и 6 возникает путаница. Условие 5 звучит так: любой из двух или трех символов может быть альфа, тогда как во втором примере указано последний должен быть альфа.

Условие 6 Использование слова аналогично означает, что условие аналогично, тогда как в первом примере указано, что символы должны быть идентичны .

Если примеры верны, вы можете использовать:

^[A-Z]{2}([ \-])[0-9]{2}[ ,][A-Z0-9]{1,2}[A-Z]\1[0-9]{4}$

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

1 голос
/ 12 марта 2010

Вот регулярное выражение ... это должно быть безопасно в большинстве / всех языках:

([a-z]{2}-\d{2}[ ,][a-z0-9]{1,2}[a-z]-\d{4})|([a-z]{2} \d{2}[ ,][a-z0-9]{1,2}[a-z] \d{4})

Причина, по которой я дважды повторю регулярное выражение со знаком "или" в середине, состоит в том, чтобы соответствовать вашим критериям, что "и (y), и (b) должны совпадать".

0 голосов
/ 12 марта 2010

Попробуйте:

<?php
$arr = array("RJ-14,NL-1234", "RJ-01,4M-5874", "RJ-07,14M-2345", "RJ 07,3M 2345", "RJ-07,3M-8888", "RJ 07 4M 2345", "RJ 07,4M 2933","RJ-07 3M 1234","RJ-07 M3-1234","rj-07 M3-123");

foreach($arr as $str) {
    if(preg_match('/[a-z]{2}( |-)\d{2}(?: |,)(?:[a-z\d]{1,2}[a-z])\1\d{4}/i',$str))
        print "$str\tYES\n";
    else
        print "$str\tNO\n";
}

?>

Выход:

RJ-14,NL-1234   YES
RJ-01,4M-5874   YES
RJ-07,14M-2345  YES
RJ 07,3M 2345   YES
RJ-07,3M-8888   YES
RJ 07 4M 2345   YES
RJ 07,4M 2933   YES
RJ-07 3M 1234   NO
RJ-07 M3-1234   NO
rj-07 M3-123    NO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...