#javascript #regex
Вопрос:
В данный момент я использую это регулярное выражение для проверки адреса
(!/^[A-Za-z]/i.test(street))
Когда я использую такой адрес — Эстерверген — это работает.
Но когда я добавил знак перед заголовком — «Эстерверген» — это показывает мою ошибку.
Хо я могу изменить свое регулярное выражение и разрешить использовать этот знак перед именем?
Комментарии:
1. Наверняка вы допустили опечатку и имели в виду
.test(street)
?2. Попробуй
(!/^[A-Za-z']/i.test(street))
3. @JeremyThille Да, извини, что я его изменил! Спасибо
Ответ №1:
Чтобы разрешить необязательное начало '
, вы бы изменили свое регулярное выражение с
/^[A-Za-z]/
Для
/^'?[A-Za-z]/
где ?
означает «ноль или один раз».
Если вы хотите разрешить '
любое место в вашей строке,
/^['A-Za-z]/
это бы сработало.
Кроме того, убедитесь, что вы понимаете, что проверяете только первый символ строки, как он есть.
Прямо сейчас вы позволите Ester9ui4y6ewigkdlLNDSKJ#€=# :::
.
Чтобы ограничить это, вам понадобится
квантор и $
якорь (конец строки).
/^[A-Za-z] $/
Ответ №2:
Давайте посмотрим, на что нацелены ваши регулярные выражения:
/^[A-Za-z]/i
^
: Утверждает позицию в начале строки.[]
: Сопоставьте один символ в зависимости от того, что внутри.A-Z
: Сопоставьте заглавные буквы отA
доZ
.a-z
: Сопоставьте строчные буквы отa
доz
.i
: Без учета регистра.
Подумайте об этом:
- Использование
[A-Za-z]
вместе сi
флагом является избыточным. Используйте/^[a-z]/i
или/^[A-z]/
вместо этого. - Использование
[a-zA-Zu00C0-u00FF]
, например, расширяет соответствие латинским символам с использованием синтаксиса ЮНИКОДА. Смотрите полную ссылку на ЮНИКОД здесь. - Используйте
/^['a-z] /i
для разрешения'
в любом месте строки. - Используйте
/^'?[a-z] /i
, чтобы разрешить'
только в начале строки.?
означает «1 раз или 0 раз».
Чтобы поиграть с регулярным выражением, вы можете использовать такие инструменты, как этот.