Регулярное выражение JavaScript - два [az], за которыми следуют только три [0-9] - PullRequest
8 голосов
/ 02 декабря 2010

У меня есть простое регулярное выражение:

[A-z]{2}[0-9]{3})$/g внутри:

regForm.submit(function(){
  if ($.trim($('#new-usr').val()).match(/([A-z]{2}[0-9]{3})$/g)) {
    alert('No');
    return false;
  }
});

Это правильно, что что-то вроде 'ab123' выдает предупреждение, а 'ab1234' - нет. Тем не менее, 'abc123' по-прежнему выдает предупреждение. Мне это нужно, поэтому он выдает предупреждение только тогда, когда это всего две буквы, за которыми следуют три цифры.

Ответы [ 3 ]

11 голосов
/ 02 декабря 2010

Попробуйте /^[A-z]{2}[0-9]{3}$/g вместо.

Вы должны указать, что вся строка должна соответствовать. В противном случае вы получите соответствие выделенной части: a bc123 .

(я пропустил (), потому что группа на самом деле не нужна).

Кстати, вы уверены, что хотите [A-z], а не просто [A-Za-z]?

7 голосов
/ 02 декабря 2010

Класс персонажа [A-z], вероятно, не то, что вам нужно.

Почему?

Класс символов [A-z] соответствует некоторым не алфавитным символам, таким как [, ] среди других.

JS fiddle link , чтобы доказать это.

Этот учебник по W3school рекомендует его неправильно.

Если вам нужны только строчные буквы, используйте [a-z]
Если вам нужны только заглавные буквы, используйте [A-Z]
Если вам нужны оба, используйте: [a-zA-Z]

Если вы хотите сопоставить строку, если онаимеет 2 буквы, за которыми следуют 3 цифры в любом месте в строке, просто удалите конечный якорь $ из вашего шаблона:

[a-z]{2}[0-9]{3}

Если вы хотите сопоставить строку, если она имеет 2буквы, за которыми следуют 3 цифры и ничего больше используйте оба начальных якоря ^ и конечный якорь $ как

^[a-z]{2}[0-9]{3}$
1 голос
/ 02 декабря 2010

В качестве альтернативы вы можете использовать:

/\b([A-z]{2}[0-9]{3})\b/g

если ваша строка содержит несколько слов и вы пытаетесь сопоставить одно слово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...