2011-12-21 84 views
2

我正在尋找一個正則表達式來檢查名稱。我搜索了網絡,並使用了發佈此問題時由StackOverflow給出的建議。正則表達式 - 名稱驗證

我也知道這是可能的階段,但我正在尋找一個正則表達式1班輪,以保持我的代碼清潔,簡單和最重要:快速。

我需要什麼: 一個正則表達式,用於在註冊到我的網站時檢查人員的姓名。我想允許的名稱作爲:

  • 名稱
  • 名稱surename
  • 名稱奧布萊恩
  • 名稱surename secondarysurname
  • 名稱surename-surnametwo
  • N. Surename

但我不想讓名字如下:

  • 名稱(雙空格鍵)
  • 名稱 - surename(雙負)
  • 名稱 - 」(只是廢話)

好吧,我想你明白我的意思,什麼我不想讓。

我只想使用a-zA-Z和 - 。 ' 我認爲這是我需要允許的唯一事情。 - 。 '符號只能在一個詞之間或之後使用一次。由於像'名字奧布萊恩'這樣的名字不存在。

但應該允許使用'Name surename secondary-thirdsurname'這樣的名稱。所以一個空格鍵和一個減號。

我想出了幾個正則表達式'使用http://public.kvalley.com/regex/regex.asp和其他正則表達式程序。但我只是一個正則表達式的noob'。

我希望有人知道很多正則表達式,並願意幫助我。因爲此刻..我卡住了:(

由於提前,

Jelmer

PS。如果您對我的問題有任何疑問,請詢問他們,因爲我真的很想!有你的幫助

+7

這是一個可怕的想法更好的方法。有很多人物可能出現在名字中,你目前排除在外。 åäöüñç...名字不規則。 – 2011-12-21 22:51:21

+4

@DavidHedlund:的確如此。另見[Falsehoods程序員相信名稱](http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/)。 – 2011-12-21 22:53:09

+0

謝謝您的評論。我知道我也必須允許這些。 (我自己的名字有一個ö),但首先我只需要對如何完成這個的基本理解:)但是你有什麼想法該怎麼做? – Jelmer 2011-12-21 22:54:04

回答

0

適用於編碼的許多方面,特別是對正則表達式的設計一般的經驗法則是,你的代碼可以是:

  1. 簡單
  2. 清潔
  3. 快速

選兩個。

除此之外,我保證一個單線這個複雜的將永遠不會乾淨。把它分解成正則表達式變量並且大膽地評論它。稍後,你會很感激你做到了!當你在它的時候,把它變成一個通用名稱驗證器類,你可以重用。雖然Perl可能會被專家徹底摧毀成爲完全不聖潔的東西,但當我們遵循我們在其他更結構化語言中遵循的禮貌和清潔的相同法則時,美感往往會出現。

TL; DR:不要把它作爲一行代碼。請。

0

這不是防彈的,但應該給你一個提示在正確的方向

([a-zA-ZáéíóúñÑ]+ ?'?-?)+ 

UPDATE:繼承人根據@Tim建議下

([a-zA-ZáíóúñÑö]+(|'|-)?)+ 
+0

太好了。所以'Joe'-O-'-'合格,但是'Wil​​liam Henry Gates III'燒壞了你的CPU。 – 2011-12-21 23:08:30

+1

如果我的評論太神祕了,請閱讀這篇關於[災難性回溯]的文章(http://www.regular-expressions.info/catastrophic.html)。 – 2011-12-21 23:15:39

+0

你甚至讀過我的評論:「這不是BULLETPROOF,但應該給你一個提示」(提示 - 一條有用的建議或實際建議) – jambriz 2011-12-22 23:14:46