Вы пытаетесь сопоставить первый символ в строке, чтобы быть чем-то конкретным, это означает, что вы должны указать регулярному выражению, что он должен быть первым символом в строке.
Regex engine просто пытается найти любой матч во всей строке.
Все, что вы говорите с [a-z]
, «найдет меня строчным символом в любом месте строки». Это означает, что:
"Hadfg"
будет равен true, так как он может найти a, d, f или g в качестве совпадения. "HADFG"
будет равен false, потому что нет строчных букв.
то же самое будет происходить по "hADFG"
при сопоставлении с [A-Z]
, например, он сможет найти A, D, F или G в качестве соответствия, тогда как "hadfg"
возвратит ложь, потому что не существует символ верхнего регистра.
Что вы ищете здесь в своем регулярном выражении ^
, это особый вид модификатора, что означает «начало строки»
Итак, когда вы применить это к вашему регулярному выражению будет выглядеть следующим образом: /^[a-z]/
.
Регулярное выражение на предыдущей строке в основном говорит «с начала строки, это первый символ, следующий за строчным a-z?»
Попробуйте, и вы увидите.
Для вашего решения вам понадобится /^[_a-zA-Z]/
, чтобы проверить, является ли первый символ символом _, a-z или A-Z.
Для справки вы можете найти cheatsheets в этих инструментах (и протестируйте его регулярные выражения с ним, конечно!)
- Regexr - Мой личный фаворит (использует ваши браузеры JS движок регулярных выражений)
- Rubular - рубин регулярное выражение тестер
- Regex101 - Python,/PCRE/PHP/JavaScript
И ссылку или учебник (я бы рекомендовал прочитать от начала до конца, если вы хотите начать понимать regexp и как они работают) theres regular-expressions.info.
Regex никогда не бывает легким и быть осторожным с тем, что вы делаете с ним, это мощный, но иногда некрасиво животное, чтобы иметь дело с :)
PS
Я вижу, ты меченый свой вопрос email-validation так Я добавлю немного бонусное регулярное выражение, которое проверяет минимальные требования в течение адреса электронной почты быть абсолютно правильно, я использую эту лично:
[email protected]+\..{2,}
, который когда распались, выглядит следующим образом:
.+
- один или более любых символов
@
- за которыми следует символ @
.+
- один или более любых символов
\.
- а затем литерал. характер
.{2,}
- два или более любых символов
При желании можно заменить {2,}
с +
, чтобы сделать это один или более, но это позволило бы TLD с 1 символов.
Чтобы увидеть RFC-письмо с регулярным выражением на рабочем месте, проверьте this link. Когда я смотрю на это регулярное выражение, я в принципе просто хочу заплакать в углу где-то, есть определенные вещи, которые вы не можете сделать в адресе электронной почты, который не задает мое регулярное выражение, но по крайней мере он уверен, что это то, что выглядит как it's e-mailable в любом случае, если новый пользователь решает заполнить какой-то бык, который больше не является моей проблемой, и я бы не хотел, чтобы они меняли этот символ 1 только потому, что огромное регулярное выражение тоже не соглашается с ним.
Что вам нужно сделать? Подтвердить? Примечание. JS не поддерживает классы символов POSIX, такие как '[: alpha:]'. Попробуйте ['/^[a-z_]/i'](https://regex101.com/r/fX2iX4/2), если проверенная строка должна начинаться с нижнего или верхнего алфавитного символа или подчеркивания *. –
https://regex101.com/r/iH6kV3/1 – Blag