2013-10-26 60 views
0

當人報名到我的地盤我驗證他們的名字與此代碼PHP的preg_match正則表達式來查找字母數字和空格?

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

這是因爲您的真實姓名不能包含符號,除非你的父母當時喝醉了,當他們叫你。

但是,這個正則表達式不檢測空格,你能幫助我嗎?

+0

那麼你需要閱讀[this](http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/)。有些人確實有「符號」,比如''''或'-'甚至是空格。 BTW'\ W'確實匹配一個空格 – HamZa

+1

小心點,你可能會得到很多名叫O'Reilly的愛爾蘭人。而且你不想愛喝醉的愛爾蘭人! –

+0

你想要準確的字符?英文字母,數字和空格? –

回答

1

您可以使用下面的正則表達式:

^[\w ]+$ 

這個字字符\w和空格任意組合相匹配,但隨着工程的人說要小心,因爲有些名字可能包含其他符號。

所以你可以使用它像這樣:

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

模式'^ [\\ w] $'匹配'w'(一次),沒有別的! –

+0

@ Programmer.zip謝謝你,這是一個錯字,你可以看到我的原始模式包含'+'符號,但是我忘記了它的代碼片段。再次感謝你。 –

+0

喲不能使用兩個反斜槓,並且您必須在正則表達式中使用'\ s'而不是空格字符。 –

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

這些被稱爲*定界符*。通常情況下,你會選擇一個「/」,其他人可能會使用下面的字符'!〜〜'。不太爲人所知的方法是使用'[]'或'()',它是*有效的*但有效的並不意味着我們應該使用它 - 這是令人困惑的。 – HamZa

相關問題