#javascript #regex
Вопрос:
Я пытаюсь убедиться, что во входные данные включено не менее 4 буквенно-цифровых символов, а также что подчеркивания также разрешены.
Учебник по регулярным выражениям немного выше моего понимания, потому что в нем говорится об утверждениях и успехе/неудаче, если есть совпадение.
^w*(?=[a-zA-Z0-9]{4})$
мое понимание:
w
—> буквенно-цифровой подчеркивание
*
—> соответствует предыдущему маркеру от нуля до неограниченного количества раз ( таким образом, это означает, что это может быть любой символ, который является буквенно-цифровым/подчеркиванием, правильно?)
(?=[a-zA-Z0-9]{4})
—> опережает предыдущие символы, и если они включают по крайней мере 4 буквенно-цифровых символа, то я в порядке.
Очевидно, я ошибаюсь на этот счет, потому что regex101 не показывает мне совпадений.
Комментарии:
1.
^[a-zA-Z0-9_]{4,}$
— ввод представляет собой строку из 4 или более символов, каждый из которых является буквой, цифрой или подчеркиванием?[a-zA-Z0-9_]{4,}
— ввод содержит последовательность из 4 или более символов, каждый из которых является буквой, цифрой или подчеркиванием?2. @DmitryBychenko привет, спасибо, что нашли время.. я хочу убедиться, что входные данные не окажутся чем-то вроде
___h8
, но будут иметь что-то вродеhello99____
3. Итак, ввод должен начинаться с буквы и содержать не менее 3 символов, каждый из которых является буквой, цифрой или символом подчеркивания?
^[a-zA-Z][a-zA-Z0-9_]{3,}$
?4. @DmitryBychenko мне все равно, с чего это начинается или заканчивается, оно может быть как можно длиннее, но я бы хотел, чтобы их было не менее 4 alphanumerics..so это позволяет предположить, что всего 6 символов, только 2 из них могут быть подчеркиванием
5. Вы можете попробовать атомарные группы:
^(?>_*[a-zA-Z0-9]_*){4}[a-zA-Z0-9_]*$
: мы гарантируем, что 4 фрагмента, каждый из которых содержит1
букву или цифру
Ответ №1:
Вам нужно 4 или более буквенно-цифровых символа, окруженных любым количеством знаков подчеркивания (используйте ^
и $
, чтобы убедиться, что они соответствуют всему вводу).:
^(_*[a-zA-Z0-9]_*){4,}$
Комментарии:
1. Пожалуйста, добавьте якоря :
^
и$
; в противном случае!!!!!abcd!!!!!
и будут совпадать
Ответ №2:
Ваш шаблон ^w*(?=[a-zA-Z0-9]{4})$
не совпадает, потому что:
^w*
Сопоставляет необязательные символы слов с начала строки, и если есть только символы слов, они будут совпадать до конца строки(?=[a-zA-Z0-9]{4})
Положительный внешний вид является истинным, если он может утверждать 4 последовательных буквенно-цифровых символа справа от текущей позиции.w*
Позволяет отследить и может отследить 4 позиции, чтобы утверждение было истинным.- Но
$
утверждает конец строки, которому он не может соответствовать, так как позиция переместилась на 4 шага влево, чтобы выполнить предыдущее положительное утверждение lookahead.
Используя внешний вид, вы можете указать 4 буквенно-цифровых символа, которым предшествуют необязательные символы подчеркивания.
Если утверждение верно, сопоставьте 1 или более символов слова.
^(?=(?:_*[a-zA-Z0-9]){4})w $
Шаблон совпадает:
^
Начало строки(?=
Позитивный взгляд, утверждающий, что справа находится(?:_*[a-zA-Z0-9]){4}
Повторите 4 раза, совпадение необязательно_
, за которым следует буквенно-цифровой символ
)
Закройте смотровую площадкуw
Сопоставьте 1 словесных символов (которые включают в_
себя )$
Конец строки
Комментарии:
1. спасибо, что уделили время, сработало бы следующее по крайней мере для 4 буквенно-цифровых символов и любого подчеркивания ИЛИ числа:
/^(?:_*[0-9]*[A-Za-z][0-9]*_*){4,}$/
я пытался сделать это с помощью логики ur, надеюсь, это сработает
Ответ №3:
Я предлагаю использовать атомарные группы (?>...)
, пожалуйста, смотрите учебник по регулярным выражениям для получения подробной информации
^(?>_*[a-zA-Z0-9]_*){4,}$
чтобы обеспечить 4 или более фрагментов, каждый из которых содержит букву или цифру.
Редактировать: Если регулярное выражение не поддерживает атомарный, давайте попробуем использовать только группы:
^(?:_*[A-Za-z0-9]_*){4,}$