2012-04-22 64 views
5

我知道有函數ctype_alpha,雖然這個函數在字符串中包含空格(空白字符)時會返回FALSE如何驗證在PHP中只包含空格的字符串?

我該如何允許字母和空格,但沒有別的?

+0

檢查前用空格替換空格嗎? – DanRedux 2012-04-22 04:59:16

+0

@DanRedux僅在字符串事先不包含數字時纔有效。 – 2012-04-22 05:01:20

+0

爲什麼?如果它事先包含數字,它將正確返回false。如果它後面包含數字,它將正確地返回false。它將做的唯一事情就是將空間轉換爲不好的令牌。 – DanRedux 2012-04-22 05:03:15

回答

5
$is_alpha_space = ctype_alpha(str_replace(' ', '', $input))); 

$is_alpha_space = preg_match('/^[a-z\s]*$/i', $input); 
+0

非常感謝。我喜歡第一個。我只是想知道學習的目的,你怎麼知道第一個?因爲我甚至無法通過文檔分辨出來。 – Carpet 2012-04-22 06:18:45

+0

這不是一個功能。它使用'str_replace()'去除空格,然後使用'ctype_alpha()'來檢查結果是否是按字母順序排列的。 – dtbarne 2012-04-22 06:21:11

+0

我明白,雖然你怎麼知道它,當文檔中的ctype頁面沒有指出(你可以做到這一點),或者它?我不能說。 – Carpet 2012-04-22 07:47:22

2
if (preg_match("^/[a-zA-Z ]+$/", $input)) { 
    // input matches 
} 

演示:http://ideone.com/jp6Wi
文檔:http://php.net/manual/en/function.preg-match.php

+0

雖然請注意''[az]'可以[根據系統的區域設置來匹配不同的字符](http://stackoverflow.com/questions/1930487/will-az-ever-match-accented-characters-in -preg-PCRE)。 – 2012-04-22 05:23:38

+0

正則表達式中有一個錯字。它應該以'/ ^'開始,而不是'^ /'開始。 – toxalot 2012-12-09 07:39:53

+0

請注意,這個正則表達式只允許有空格的字符串。這可能是也可能不是預期的結果。 – toxalot 2012-12-09 08:49:33

0

ctype_alpha(preg_replace('/\s/', '', $mystring))

內表達式返回不帶空格的字符串,然後使用ctype_alpha``如你所願

+0

這屬於**類別如果您不需要更換規則,您應該始終使用'str_replace'而不是'preg_replace'。** – toxalot 2012-12-09 07:44:52

0

刪除空格是要走的路,但記住ctype_alpha這些日子在空字符串上會導致false!在我使用的方法下面...

function validateAlpha($valueToValidate, $spaceAllowed = false) { 
    if ($spaceAllowed) { 
     $valueToValidate = str_replace(' ', '', $valueToValidate); 
    } 
    if (strlen($valueToValidate) == 0) { 
     return true; 
    } 
    return ctype_alpha($valueToValidate); 
} 
相關問題