Очень простой и наивный вопрос: почему это так?

new RegExp('^[a-z]+$', 'i').test('B')

По-видимому, 'B' из [a-z]?

4
marstone 25 Янв 2013 в 18:39

4 ответа

Лучший ответ

Да, но у вас есть параметр i, который указывает регулярному выражению игнорировать регистр.

Из документации MDN для RegEx:

Параметры

шаблон

Текст регулярного выражения.

флаги

Если указано, флаги могут иметь любую комбинацию из следующих значений:

...

    < Литий> < р > i

    игнорировать регистр

10
Justin Ethier 25 Янв 2013 в 14:40

Он определяет класс, то есть [a-z] является символом «любого символа, от a до z».

По своей природе Regex также является регистром SensItiVe, поэтому [a-z] отличается от [A-Z] (если только вы не используете флаг i (без учета регистра), как вы уже продемонстрировали).

Например

/[a-z]/              -- Any single character, a through z
/[A-Z]/              -- Any single uppercase letter, A through Z
/[a-zA-Z]/           -- Any single upper or lowercase letter, a through z
/[a-z]/i or /[A-Z]/i -- (note the i) Any upper or lowercase letter, a through z
3
Brad Christie 25 Янв 2013 в 14:40

Это означает любой символ между a и z.

Поскольку вы указали флаг i (без учета регистра), он также содержит B.

Полное регулярное выражение проверяет, что строка содержит хотя бы один символ и что все символы находятся в a-z или A-Z.

Вы можете проверить, что new RegExp('^[a-z]+$', 'i').test('B') возвращает true.

0
Denys Séguret 25 Янв 2013 в 14:40

Резюме

  • [A-z] означает набор символов, содержащий символы a-z.

  • ^ Является якорем, что означает, что набор должен начинаться с первого символа ввода.

  • Знак + означает, что вы должны соответствовать одному или нескольким из набора символов.

  • $ Является конечной привязкой, означающей, что набор должен заканчиваться последним символом ввода.

  • I означает игнорировать регистр в ваших вводимых букв.

1
25 Янв 2013 в 14:45