2017-05-15 29 views
2

我知道還有其他方法可以做到這一點,但我正在使用ctype_alpha驗證名稱字段,但允許使用空格,連字符和撇號。使用ctype_alpha時允許使用撇號嗎?

在Stack上的另一篇文章中,我能夠添加空格沒有問題,但我認爲我有用於替換多個字符的語法錯誤。

我到目前爲止,對於驗證,只有字母和空格是允許使用的作品:

if (ctype_alpha(str_replace(' ', '', $name)) === false) { 
    echo'Name must contain letters and spaces only'; 
    exit; 
} 

這個檢查字符串只有字母之前刪除任何空格。我正在尋找簡單地添加到這也允許連字符和撇號。

我試着添加連字符和/或撇號是什麼(不工作):

if (ctype_alpha(str_replace(' ', '', '-', '', $name)) === false) { 
    echo'Name must contain letters and spaces only'; 
    exit; 
} 

我的猜測是,在str_replace函數功能添加第二個字符串不是正確的語法,但作爲一個PHP新手,我很難找出如何將我的搜索短語找出正確的語法。

另外,我正確地說'\ w'會覆蓋我的撇號,一旦我找出str_replace函數的正確語法?

真誠感謝幫助的人。你是無價的,我努力不要濫用它。

回答

2

正確的語法,如在manual指出的是:

if (ctype_alpha(str_replace(array(' ', '', '-'), '', $name)) === false) { 
    echo'Name must contain letters and spaces only'; 
    exit; 
} 

隨着撇號

if (ctype_alpha(str_replace(array(' ', '', '-',"'"), '', $name)) === false) { 
    echo'Name must contain letters and spaces only'; 
    exit; 
} 
+0

這絕對適用於添加連字符,但我假設我不能只在其中添加撇號。我在另一篇文章中嘗試過'\ w'和'\ w +',但都沒有正常工作。 換句話說,我嘗試過: if(ctype_alpha(str_replace(array('','\ w +',' - '),'',$ name))=== false){ echo'Name must只包含字母和空格'; 退出; } ...與'\ w +'的其他變體。 – sforcash

+0

@sforcash撇號添加 – rtfm

+0

謝謝。巨大的幫助。 – sforcash

2

使用 '\ W' 是不可行的相對於所述撇號,即一個單引號字符。每manual

\ w任何單詞字符(字母,數字,下劃線)

至於OP的代碼的語法,首要問題是需要有對字符數組str_replace()的第一個參數,以替換多個字符。

除了包圍在雙引號單引號("'"),PHP允許逸出以反斜槓單引號字符,然後在單引號包圍它,如下面的片斷表明:

<?php 

$name = "Kate O'Henry-Smith"; 
$arrDelChars = [' ','\'','-']; 

if (ctype_alpha(str_replace($arrDelChars, '', $name)) === false) { 
    exit("Name must contain letters and spaces only\n"); 
} 

print_r($name); 

demo

str_replace()根據要排除的值的數組,使用空字符串替換$ name中的每個字符。注意,指定數組中的空字符串是不必要的,因爲替換值是空字符串。出現的新字符串成爲ctype_alpha()而不是$ name的實際參數。相應地,該函數返回true。因此,if-條件評估爲false,從而防止顯示錯誤消息。可以讓ctype_alpha()驗證$ name這個可以說話的可愛技巧。