2013-10-26 2 views
0

Когда люди зарегистрироваться на моем сайте я проверить свои имена с этим кодомPHP preg_match regex для поиска букв чисел и пробелов?

if (preg_match("[\W]", $name)) 
{ 
$mess = $mess."Your name must contain letters only.<br>"; 
$status = "NOTOK"; 
} 

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

Однако это регулярное выражение не обнаруживает пробелы, вы можете мне помочь?

+0

Ну вам нужно прочитать [это] (http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/). У некоторых людей есть «символы», такие как '' 'или' -' или даже пробел. BTW '\ W' соответствует пробелу – HamZa

+1

Осторожно, вы можете свалить много ирландцев по имени О'Рейли. И вы не хотите мочиться с пьяными ирландскими людьми! –

+0

Какие символы вы хотите точно указать? Английские буквы, цифры и пробелы? –

ответ

1

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

^[\w ]+$ 

Это соответствует любым комбинациям символов слова \w и пространство , но ребята сказали быть осторожным, потому что некоторые имена могут содержать и другие символы.

Таким образом, вы можете использовать его как это:

if (preg_match("/^[\\w ]+$/", $name)) { 
    // valid name 
} 
else { 
    // invalid name 
} 
+1

Образец '^ [\\ w] $' соответствует 'w' (один раз) и ничего больше! –

+0

@ Programmer.zip Спасибо, это была опечатка, так как вы можете видеть, что мой первоначальный шаблон включал символ '+', но я забыл его в фрагменте кода. Еще раз спасибо. –

+0

Yo НЕ должен использовать две обратные косые черты, и вы должны использовать '\ s' вместо символа пробела в regexp. –

1

Попробуйте это:

<?php 

$user_input = 'User_name'; 

    if (!preg_match('/^[a-z0-9_\s]+$/i', $user_input)) { 
// matches English letters, numbers underscores(_) and spaces 

    $mess = $mess."Your name must contain letters only.<br>"; 
    $status = "NOTOK"; 
} 

?> 
0

Вы просто пропустили регулярное выражение сепараторов, я делаю это иногда даже после 10 лет программирования.

if (preg_match("/[\W]/", $name)) ... 
+0

Эти символы называются * разделителями *. Обычно вы будете использовать forwardlash '/', другие могут использовать следующие символы '! # ~'. Менее известный метод заключается в использовании '[]' или '()', это * valid *, но что-то действительно не означает, что мы должны его использовать - это запутывает. – HamZa

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