Регулярные выражения. Только латинница и цифры в строке

regexp.test(string)

Нужно проверить строку на полное совпадение с регулярным выражением (наличие в строке только латинницы и цифры одновременно).

^[a-zA-Z0-9]+$ - пробовал, оно проверяет как ИЛИ, а надо И.

Несколько примеров кейсов: "1" "q1" "1q" "q1q1" "asdasdDASD2ewdasFwd3E" "asdadsdasd234234" "123q" "1q2e3r1aAWwd23da1" "d23erwry2367rtw7y8urj43ur2u920fjwheufds89sjk" "qkwduiygfewr1627e81i02171tey18eu901ie09u8u8u88uu88uu000"


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Вы можете использовать одно из следующих выражений:

^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]+$
^(?=\d*[a-zA-Z])(?=[a-zA-Z]*\d)[a-zA-Z\d]+$
^(?=\d*[a-zA-Z])(?=\D*\d)[a-zA-Z\d]+$
^(?:\d+[a-zA-Z]|[a-zA-Z]*\d)[a-zA-Z\d]+$
^([0-9]+[a-zA-Z]|[a-zA-Z]*[0-9])[a-zA-Z0-9]+$

Подробности

  • ^ - начало строки
  • (?=.*?[a-zA-Z]) - после нуля и более символов, отличных от символов перевода строки, как можно меньше, должна быть буква из набора ASCII
  • (?=.*?\d) - после нуля и более символов, отличных от символов перевода строки, как можно меньше, должна быть буква из набора ASCII
  • (?=\d*[a-zA-Z])(?=[a-zA-Z]*\d) - после текущей позиции должно быть ноль и более цифр, сразу после которых идёт буква из набора ASCII, или ноль и более букв из набора ASCII, сразу после которых идёт цифра
  • (?=\d*[a-zA-Z])(?=\D*\d) - после текущей позиции должно быть ноль и более цифр, сразу после которых идёт буква из набора ASCII, или ноль и более нецифровых символов, сразу после которых идёт цифра
  • (?:\d+[a-zA-Z]|[a-zA-Z]*\d)[a-zA-Z\d]+ / ([0-9]+[a-zA-Z]|[a-zA-Z]*[0-9])[a-zA-Z0-9]+ - одна и более цифр, а потом буква из набора ASCII или ноль и более букв из набора ASCII, а потом цифра, после которых идёт одна и более цифр или букв из набора ASCII
  • [a-zA-Z\d]+ - одна и более цифр или букв из набора ASCII
  • $ - конец строки.
→ Ссылка