Шаблон регулярного выражения для соответствия как минимум 1 числу и 1 символу в строке
У меня есть регулярное выражение
/^([a-zA-Z0-9]+)$/
это просто позволяет использовать только буквенно-цифровые символы, но также, если я вставляю только число (-ы) или только символ (-ы), то он также принимает его. Я хочу, чтобы он работал, как поле должно принимать только буквенно-цифровые значения, но значение должно содержать как минимум 1 символ и 1 номер.
Ответы
Ответ 1
Почему бы не сначала применить весь тест, а затем добавить отдельные тесты для символов и цифр? В любом случае, если вы хотите сделать все это в одном регулярном выражении, используйте положительный прогноз:
/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
Ответ 2
Этот RE будет делать:
/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i
Объяснение RE:
- Соответствует любому из следующих:
- Как минимум одно число, затем одна буква или
- Как минимум одна буква, затем одно число плюс
- Любые оставшиеся числа и буквы
-
(?:...)
создает группу без ссылок
-
/i
- это флаг игнорирования, так что a-z
== a-zA-Z
.
Ответ 3
Я вижу, что другие респонденты дали вам полное решение. Проблема с регулярными выражениями заключается в том, что их трудно поддерживать/понимать.
Более простым решением будет сохранение существующего регулярного выражения, а затем создание двух новых регулярных выражений для проверки "по крайней мере одного алфавитного" и "по крайней мере одного числового".
Итак, проверьте это: -
/^([a-zA-Z0-9]+)$/
Затем это: -
/\d/
Затем это: -
/[A-Z]/i
Если ваша строка передает все три регулярных выражения, у вас есть ответ, который вам нужен.
Ответ 4
Это решение принимает как минимум 1 номер и не менее 1 символа:
[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
Ответ 5
Хотя принятый ответ верен, я считаю, что это регулярное выражение намного легче читать:
REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
Ответ 6
Может быть, немного поздно, но это мой RE:
/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/
Пояснение:
\w*
→ 0 или более буквенно-цифровых цифр, в начале
\d+[a-zA-Z]|[a-zA-Z]+\d
→ цифра + буква ИЛИ буква + цифра
\w*
→ 0 или более буквенно-цифровых цифр, снова
Надеюсь, это было понятно [/p >
Ответ 7
И идея с отрицательной проверкой.
/^(?!\d*$|[a-z]*$)[a-z\d]+$/i
-
^(?!
при запуске смотреть вперёд, если строка не
-
\d*$
содержат только цифры |
или
-
[a-z]*$
содержат только буквы
-
[a-z\d]+$
соответствует одной или нескольким буквам или цифрам до конца $
.
Посмотрите на эту демонстрационную версию regex101
(флаг i
отключает сопоставление без использования кеша: a-z
соответствует a-zA-Z
)
Ответ 8
Принятые ответы не обрабатываются, так как не позволяют вводить специальные символы.
Это сработало идеально для меня.
^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{6,20}$
- одна цифра должна
- один символ должен (нижний или верхний)
- все остальные вещи по желанию
Спасибо.
Ответ 9
@Одинокий нейрон, он работает (принимает как минимум 1 номер и как минимум 1 символ) отлично. Спасибо.