2016-10-18 3 views
7

Как сделать регулярное выражение, которое претворяет:Regex в PHP - буквы и цифры с ограниченной длиной

  • букв и цифр (по крайней мере 1 каждого)
  • мин и максимальную длину (10 до 50) не
  • ничего, кроме букв и цифр

при использовании PHP preg_match?


Вот что я получил:

^[A-Za-z0-9]{10,50}$ 

Это, кажется, делает все, кроме соблюдения буквы и цифры.

ответ

5

Do:

^(?=.*(?:[A-Za-z].*\d|\d.*[A-Za-z]))[A-Za-z0-9]{10,50}$ 
  • (?=.*(?:[A-Za-z].*\d|\d.*[A-Za-z])) равна нулю ширина положительной опережения, это гарантирует, что есть по крайней мере одна буква и одна цифра присутствует

  • [A-Za-z0-9]{10,50} убеждается матч содержит только буквы и цифры

Demo


Или даже чище, использовать два lookaheads вместо OR-Инг (благодаря chris85):

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z0-9]{10,50}$ 
+0

благодарит работает братан, я только что проверил это на том же сайте – Ibrahim

+2

я добавлю это здесь, https://regex101.com/r/TTeWKd/1, может использовать 2 взгляда вперед, не нужно «или» и дублировать проверку персонажа. – chris85

+0

@ chris85 Thats cleaner, добавлено. Благодарю. – heemayl

Смежные вопросы