Подтвердить что ты не робот

Шаблон регулярного выражения для соответствия как минимум 1 числу и 1 символу в строке

У меня есть регулярное выражение

/^([a-zA-Z0-9]+)$/

это просто позволяет использовать только буквенно-цифровые символы, но также, если я вставляю только число (-ы) или только символ (-ы), то он также принимает его. Я хочу, чтобы он работал, как поле должно принимать только буквенно-цифровые значения, но значение должно содержать как минимум 1 символ и 1 номер.

4b9b3361

Ответ 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 символ) отлично. Спасибо.