2011-02-24 148 views
4

我想創建一個驗證一個人的名字的正則表達式。這些應該被允許:正則表達式來驗證名稱

  • 字母(大寫和小寫)
  • -
  • 空間

這是很容易地創建一個正則表達式。問題是有些人在他們的名字中也使用了特殊字符。例如,假設名爲gûnther或François的用戶。有很多像û和ç這樣的字符可用,很難列出所有這些。

有沒有簡單的方法來檢查正確的人名?

+0

中文或西里爾文的名字怎麼樣?你使用什麼字符集? – 2011-02-24 13:26:18

+0

例如,名稱也可以包含引號,如「O'Neill」中的引號。 – Capsule 2011-02-24 13:27:09

+0

中文或西里爾文的名字是不允許的......應該有一個限制。我不確定哪個字符集最適合使用... – Bv202 2011-02-24 13:29:06

回答

7

有沒有簡單的方法來檢查正確的人名?

這已經討論了好幾次了。我敢肯定的是,人們可以同意的唯一的事情就是爲了存在的名稱不能爲空字符串,即:

^.+$ 

(是的,我知道這可能不是什麼OP所期待的。我只是總結前面Q &爲。)

+0

+1,唯一正確答案IMO。 – Wrikken 2011-02-24 13:34:54

7

/^\pL[\pL '-]*\z/應該做的伎倆

+0

我太慢了。只是一句話:只適用於PHP> = 5.1.0 – Boldewyn 2011-02-24 13:33:32

+0

這個正則表達式有什麼作用? – Bv202 2011-02-24 13:45:29

+1

@ Bv202,它要求字符串包含一個或多個:'\ pL'(一個Unicode字母),空格,撇號和連字符。以unicode字母開頭。 – 2011-02-24 13:49:53

0

我並不確切地知道你正在嘗試做的(驗證用戶名輸入?),但基本上我會保持簡單 - 如果文本包含數字,則驗證失敗。即使這可能很不穩定。

1

簡短的回答是否定的,沒有簡單的方法。你已經觸及最大的問題。有很多特殊情況下的口音和額外的信件掛起,這將成爲一個混亂的處理。此外,與分解到這樣的事情

^[CAPITAL_LETERS][ALL_LETERS_AND_SYMBOLS]*$ 

那還不是因爲「ABCD」是有幫助的表達符合這一點,你有沒有辦法知道,如果有人錯誤地輸入信息到現場,或者如果它是一個瘋狂的好萊塢父母,他們真的命名他們的孩子,或者像三明治或傘。

+0

最後一句話+1:D – 2013-11-22 04:46:56

0

我有同樣的問題。首先,我想出了類似

preg_match("/^[a-zA-Z]{1,}([\s-]*[a-zA-Z\s\'-]*)$/", $name)) 

但後來意識到,UTF-8字符例如o一個不會允許像瑞典,中國等國家,是我的網站很重要的,因爲它是一個國際性的網站,不想強迫用戶無法輸入真實姓名。

雖然這可能是一個更簡單的解決方案,而不是試圖弄清楚如何讓像O'Malley和Brooks-Schneider這樣的名字以及Õsmar(讓那個人起來:)而寧可抓住你不想要的字符進入。對我來說,這基本上是爲了避免輸入xss JS代碼。所以我使用下面的正則表達式來過濾掉所有可能有害的字符。

preg_match("/[[email protected]#\$%\^&\*\(\)=\+\|\[\]\{\};\\:\",\.\<\>\?\/]+/", $name) 

這樣,他們可以輸入任何他們想要的名字,除了字符真的不屬於任何名稱的一部分。希望這可能會有用。

1
^.+$ 

經過@jensgram答案,但正則表達式只接受所有字符串,所以它並沒有解決問題,因爲字符串需要的名字,在這種情況下,它可以是任何東西。

^([A-Z]{1})[a-z]+$ 

我的正則表達式只接受字符串,其中第一個字符是大寫字母,後面的字符是小寫字母。也看其他答案,這似乎是最短的正則表達式,也最簡單。