2012-02-22 4 views
3

Вот регулярное выражение я в настоящее время (какой вид работ):PHP: Regex для точного соответствия

$regex = '/[\w ]{7,30}/'; 

Моя редакция выглядит то, что я хочу, но он не работает на всех:

$regex = '^[\w ]{7,30}$'; 

Вот как я использую регулярное выражение:

public function isValid($value) 
{ 

    $regex = '/^[\w ]{7,30}$/'; 
    return preg_match($regex, $value) ? true : false; 

} 

Я пытаюсь соответствовать следующим образом:

  • Любой нижний/верхний регистр буквы
  • Любая цифра
  • может содержать пробелы
  • не может содержать разрывы строк или табуляции
  • Минимум 7 символов
  • максимум 30 символов

Допустимые входы:

  • Тестирование
  • Тестовые ИНГ
  • test123
  • Тестовые 123
  • Test___

инвалидные входы:

  • Тестирование #
  • Testin8 +
  • Tester1 &

Первое регулярное выражение будет соответствовать всем действительным входам, а также недействительным (до тех пор, как первый четыре символа является действительным, он не заботится об остальных). Второе регулярное выражение ничего не соответствует.

+0

'^ ... $' соответствует всей строке. '\ w' соответствует символам,' \ d' соответствует цифрам – knittl

+0

также для лучшего использования пробелов \ s/[\ w \ s] {7,30}/ –

+0

@alickus '\ s' включает в себя разрывы строк и вкладки, поэтому Нет, лучше использовать '\ s'. –

ответ

2

Попробуйте соединить оба, как так:

$regex = '/^[\w ]{7,30}$/'; 
+0

Мне нужно было добавить разделители, а также избежать ввода из моего запроса ajax. Некоторые специальные символы не отправляются, если не сбежать. –

0

Вы упускаете / в начале и в конце.

$regex = '/^[\w ]{7,30}$/'; 
+0

Мой плохой; этот комментарий не был живым, когда я написал свой ответ. – Edwin

0
'/^[\w ]{7,30}$/' 

Вы упускаете разделители.

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