Шаблон регулярного выражения для соответствия как минимум 1 числу и 1 символу в строке - PullRequest
43 голосов
/ 07 октября 2011

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

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

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

Ответы [ 8 ]

86 голосов
/ 07 октября 2011

Почему бы сначала не применить весь тест, а затем добавить отдельные тесты для символов и цифр?В любом случае, если вы хотите сделать все это за одно регулярное выражение, используйте положительный прогноз:

/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
17 голосов
/ 07 октября 2011

Это RE будет делать:

/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i

Объяснение RE:

  • Соответствует любому из следующих:
    1. Как минимум одно число, затем одна буква или
    2. Как минимум одна буква, затем одна цифра плюс
  • Все оставшиеся цифры и буквы

  • (?:...) создает группу без ссылок
  • /i является флагом игнорирования , так что a-z == a-zA-Z.
14 голосов
/ 07 октября 2011

Я вижу, что другие респонденты дали вам полное решение.Проблема с регулярными выражениями заключается в том, что их может быть трудно поддерживать / понимать.

Более простым решением было бы сохранить существующее регулярное выражение, а затем создать два новых регулярных выражения для проверки на наличие "по крайней мере одного алфавита" и "по крайней мере"один числовой ".

Итак, проверьте это: -

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

Тогда это: -

/\d/

Тогда это: -

/[A-Z]/i

Если ваша строка проходит все три регулярных выражения, у вас есть ответ, который вам нужен.

4 голосов
/ 10 марта 2017

Хотя принятый ответ правильный, я нахожу это регулярное выражение намного проще для чтения:

REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
4 голосов
/ 28 августа 2015

Это решение принимает как минимум 1 цифру и как минимум 1 символ:

[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
3 голосов
/ 06 августа 2013

Возможно, немного поздно, но это мой RE:

/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/

Объяснение:

\w* -> 0 или более буквенно-цифровых цифр наначало

\d+[a-zA-Z]|[a-zA-Z]+\d -> цифра + буква ИЛИ буква + цифра

\w* -> 0 или более буквенно-цифровых цифр, опять же

Я надеюсь, что этобыло понятно

2 голосов
/ 23 июля 2017

И идея с отрицательной проверкой.

/^(?!\d*$|[a-z]*$)[a-z\d]+$/i
  • ^(?! в начале взгляд вперед если строка не
  • \d*$ содержит только цифры | или
  • [a-z]*$ содержит только буквы
  • [a-z\d]+$ соответствует одной или нескольким буквам или цифрам до $ конца.

Посмотрите демонстрацию regex101

(флаг i включает сопоставление без регистра : a-z совпадения a-zA-Z)

0 голосов
/ 14 декабря 2018

Принятые ответы не работают, так как не позволяют вводить специальные символы.

Для меня это отлично работает.

^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{6,20}$

  • одинцифра обязательно
  • один символ обязательно (нижний или верхний)
  • все остальные необязательные

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...