Регулярное выражение 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.12.2010
Scott Brown
6020 репутация

3 ответов


  • 11 рейтинг

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

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

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

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

    ответ дан Vlad, с репутацией 29297, 2.12.2010
  • 7 рейтинг

    Класс персонажа [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}$
    
    ответ дан codaddict, с репутацией 337564, 2.12.2010
  • 1 рейтинг

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

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

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

    ответ дан sh54, с репутацией 612, 2.12.2010