2012-06-01 4 views
2
$pattern="/[a-z]*[a-z]*/i"; 
if(!preg_match($pattern, $value)){ 
     $this->error_name="The name should contain at least two letters."; 
     } 

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

Регулярное выражение, которое я написал, не работает..почему?

+2

Потому что '*' означает «ноль или больше». '111111' имеет нулевые буквы, поэтому он соответствует. http://www.regular-expressions.info/repeat.html –

ответ

0
$pattern="/[a-z].*[a-z]/i"; 
if(!preg_match($pattern, $value)){ 
    $this->error_name="The name should contain at least two letters."; 
} 

Ваш код не работает, потому что * означает ноль или более раз, поэтому он также не будет соответствовать ни одному, ни одному символу.

+0

'. *' Не требуется, если вы хотите проверить, содержит ли строка две буквы. –

+0

Он работает только следующим образом: aa1111111111 .. но что, если имя пользователя a1111111111a .. также верно –

+0

Исправлено добавлением '. *' Между ними. – Jeroen

1

Попробуйте это (код изменен):

$pattern="/^[a-z]{2}.*/i"; 
if(!preg_match($pattern, $value)){ 
     $this->error_name="The name should contain at least two letters."; 
     } 
+0

будет ли он работать для чего-то подобного: a11111111111a –

3

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

$pattern="/^[a-z]{2,}$/i"; 

Это гарантирует, что название имеет только буквы и есть, по крайней мере, 2 письма в имя.

Edit:

Похоже, вы хотите, чтобы имя содержать, по меньшей мере, две буквы и может содержать другие небуквы, а также:

$pattern="/^.*[a-z].*[a-z].*$/i"; 
+0

Но он также может содержать символы, отличные от '' alpha''. – Cylian

+0

Но я думаю, что это означает, что, по крайней мере, две буквы, начинающиеся близко друг к другу ... это имя пользователя также верно. A111111111b –

0
$pattern="/^([a-z]{2})|([a-z].*[0-9].*[a-z].*).*/i"; 

Я думаю, что ответ должен быть один выше .. ваши ответы дал мне ключ ..

теперь он будет соответствовать также те имена:

a1111111111111a

1

Возвращает TRUE, если по крайней мере два алфавита используются в строке:

preg_match_all('/[a-z]/', $str, $m) >= 2; 
+0

+1, хороший трюк! – Cylian

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