Закрепите строку, используя ^
и $
, которые соответствуют "началу строки" и "концу строки", соответственно.
Ваше регулярное выражение будет ^[a-z]$
, что означает, что вы ожидаете совпадения с одним символом от a
до z
, и этот единственный символ должен соответствовать всей строке.
Причина, по которой [a-z]{1}
(что эквивалентно [a-z]
) не работает, заключается в том, что вы можете сопоставлять отдельные символы по всей строке.Начало / конец строки не «закреплены».
let str = ['a','b','ab','aa','abcdefg'];
const regex = /^[a-z]$/;
str.forEach(w => console.warn(w, regex.test(w)));
Кстати, [{1}a-z]
не делает то, что вы думаете, что он делает.Вы намеревались соответствовать одному буквенному символу, но это добавляет еще три символа в список совпадений, который становится:
Я думаю, вы имели в виду [a-z]{1}
, что, как отмечалось ранее, эквивалентно [a-z]
.