2013-09-27 32 views
1

我很難將正確的表達放在一起,因此它拒絕除字母,句號,撇號,空格和連字符之外的所有內容。名稱php的表單驗證包括撇號,空格,連字符和句點

到目前爲止,這適用於除撇號之外的所有內容,我試圖用單個和雙「\」來逃脫都無濟於事。

if(!preg_match("/^[a-zA-Z'. -]+$/",$_POST['name'])) 
    { 
     $error_name="The name you entered is invalid."; 
    } 
//obrien - pass 
//o'brien - fail 
//Dr. OBrien - pass 
//Dr. O'Brien - fail 

這工作完全不同的是沒有撇號將其清除。

+0

這應該工作得很好。你面臨什麼問題? –

+1

我無法重現此問題。你可以用'$ _POST ['name']'的值來更新你的問題嗎?'沒有通過你的測試? –

+0

它仍然拒絕像O'Brien那樣的撇號 –

回答

2

我認爲這是因爲你試圖檢查url編碼的字符串。將$_POST['name']替換爲urldecode($_POST['name'])。在這個階段的撇號看起來像%27,所以$ _POST ['name']中的O'Brien是O%27Brien,它不會傳遞你的正則表達式。

編輯:另外,也許這是另一種類型的撇號,你輸入的形式爲:

結果:

if(!preg_match("/^[a-zA-Z’'. -]+$/",urldecode($_POST['name'])) { 
    $error_name="The name you entered is invalid."; 
} 
+0

是的,但爲什麼'博士OBrien'通過?該空間必須是'%20'。 – Toto

+0

或者+號。但你是對的,初始正則表達式也不能接受加號。我會用新的變體更新我的答案。 –

+0

對不起,它不起作用。感謝您的關注。 –

2

的問題結束了,在這我不能在我的GoDaddy的帳戶訪問php.ini中,和addslashes必須啓用。以下使它工作。感謝Sergey讓我思考服務器可能對發佈的數據做什麼。

if(!preg_match("/^[a-zA-Z'. -]+$/", stripslashes($_POST['name'])) 
{ 
whatever error message 
} 
1

這是一個了不起的,我能夠想出來的,我認爲它應該能夠與大多數名稱都具有hypens,撇號,空格等。

if(!preg_match('/^([a-zA-Z]+[\'-]?[a-zA-Z]+[ ]?)+$/', $string)) 
相關問題