Регулярное выражение JavaScript-два [a-z], за которыми следуют только три [0-9]


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

[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' все еще бросает предупреждение. Мне это нужно, чтобы он только бросал сигнал тревоги, когда это всего лишь 2 буквы, за которыми следуют три цифры.

3 7

3 ответа:

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

Необходимо указать, что вся строка должна быть сопоставлена. В противном случае вы получите выделенную часть, соответствующую: abc123.

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

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

Класс символов [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}$

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

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

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