2013-03-11 143 views
3

我使用PHP驗證我的聯繫表,我用下面的代碼:過PHP字母和空格只驗證

if (ctype_alpha($name) === false) { 
      $errors[] = 'Name must only contain letters!'; 
} 

此代碼工作正常,但它證明了,不允許空格。我試過ctype_alpha_s,並提出了一個致命的錯誤。

任何幫助,將不勝感激

+0

連字符和單引號/反引號怎麼樣?這些名稱也是有效的字符。 – Eric 2013-03-11 18:56:55

+0

「John O'Reily」或「BjörkGuðmundsdóttir」或「A'ishah-Yunus」如何? – 2013-03-11 19:18:30

回答

15

正則表達式是矯枉過正而對於這樣一個簡單的任務會表現更差,可以考慮使用本地字符串函數:在運行阿爾法檢查前

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

這將去掉空格。如果你想使用它你的目的

str_replace(array("\n", "\t", ' '), '', $name); 
3

而ctype_alpha只爲字母[A-Za-z]

檢查,第一ü將不得不刪除:如果選項卡和新線是一個問題,你可以考慮用這個代替您的字符串中的空格,然後應用ctype_alpha。

但我會去preg_match檢查驗證。你可以做這樣的事情。

if (!preg_match ("/^[a-zA-Z\s]+$/",$name)) { 
    $errors[] = "Name must only contain letters!"; 
} 
1
if (ctype_alpha(str_replace(' ', '', $name)) === false) { 
    $errors[] = 'Name must contain letters and spaces only'; 
} 
+0

歡迎來到Stack Overflow!儘管這段代碼可以解決這個問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – JonasCz 2016-06-06 12:36:10

0

一爲UTF-8的世界,將匹配任何語言的空格和字母。

if (!preg_match('/^[\p{L} ]+$/u', $name)){ 
    $errors[] = 'Name must contain letters and spaces only!'; 
} 

說明:

  • [] =>字符類定義
  • p {L} =>在p {L}後
  • 空間任何種類的字母字符的匹配從任何語言=>匹配空格
  • + =>量詞 - 匹配1到無限次(貪婪)
  • /u => Unicode修飾符。模式字符串被視爲UTF-16。此外 原因轉義序列匹配Unicode字符

爲在上述安東尼HATZOPOULOS評論指出這也將匹配像比約克Guðmundsdóttir名。

相關問題