2015-12-07 2 views
2

Сейчас я пытаюсь создать PHP регулярное выражение с помощью этих следующих условий:PHP Regex - Должен содержать по крайней мере любые 2 буквы в UTF-8

  • Принимает все UTF-8 символов
  • Пробел между словами разрешен, как только 1 пробел, а не несколько.
  • Разрешить все символы, например:! # $%^& *() _- = {} [] кроме: "@"
  • Отсутствие пробелов после строки или перед строкой.
  • Диапазон должен быть 2-16 символов, включая пробелы
  • И должен содержать не менее двух буквенных символов в строке.

Вот это Regex я нарисовала до сих пор:

/^(?=.{2,16}$)[^@\s]+(?:\h[^@\s]+)*$/um

До сих пор это делает все следующие за исключением того, что не соответствует последнему условию, которое является то, что она должна содержать не менее 2 букв. Например:

"..He" //should be true

"He$*" //should be true

".." //should be false

"*%" //should be false

"!#$%^&*()" //should be false since there is no letters

"$$tonyMoney™" //should be true

"أنا أحب جا™" //should be true

"To" //should be true

Любая помощь приветствуется! Спасибо!

+0

в это используется для проверки имени пользователя ?? – Andrew

+0

Означает ли это, что @Andrew? –

+0

Возможный дубликат [Регулярное выражение для пароля (не менее 2 цифр и один специальный символ и минимальная длина 8)] (http://stackoverflow.com/questions/19491670/regular-expression-for-password-at-least-2 -digits-and-one-special-character-and) –

ответ

3

Вы можете использовать

/^(?![^@]*@)(?!.*\s\s)(?=(?:\P{L}*\p{L}){2})\S.{0,14}\S$/us 

Вот regex demo (модифицированный бит для демонстрации с многострочным текстом).

Чтобы регулярное выражение работало со строками Unicode, вам необходимо указать модификатор /u. Для ., чтобы соответствовать любому символу, вам нужно использовать модификатор /s.

Регулярное выражения Разбивка:

  • ^ - начало строки
  • (?![^@]*@) - убедитесь, что нет в строке
  • (?!.*\s\s) нет @ - убедитесь, что нет 2 последовательных пробельных
  • (?=(?:\P{L}*\p{L}){2}) - убедитесь, что есть не менее 2 букв Юникода
  • \S.{0,14}\S - 2 символа является обязательным, должны начинаться и заканчиваться непробельным, от 2 до 16 символов длиной
  • $ - конец строки
+0

Обратите внимание, что '' أنا أحب جافا سكريبت ™ "' длиннее 16 символов. –

+0

@CasimiretHippolyte: Верно, не думал об этом. Исправлено. –

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