2012-11-13 60 views
12

我在創建正則表達式驗證程序時遇到問題,該驗證程序檢查以確保輸入僅包含大寫或小寫字母字符,空格,句點,下劃線和破折號。無法通過搜索在線查找此示例。例如:正則表達式只允許大寫/小寫字母(英文字母),句點,空格和破折號是什麼?

這些都OK:

Dr. Marshall 
sam smith 
.george con-stanza .great 
peter. 
josh_stinson 
smith _.gorne 

含有其他字符任何是不行的。這是數字或其他符號。

回答

45

你正在尋找的正則表達式是^[A-Za-z.\s_-]+$

  • ^聲稱,正則表達式必須在主題
  • []的開始匹配的字符類 - 匹配這裏面表達的任何字符允許
  • A-Z允許大寫字符的範圍
  • a-z允許一系列小寫字符
  • .相匹配的週期 而不是字符範圍
  • \s匹配空白(空格和製表符)
  • _下劃線
  • -破折號(連字符)相匹配的匹配;我們將它作爲字符類中的最後一個字符,因此它不會被解釋爲字符範圍的一部分。我們也無法逃脫它(\-)來代替,並把它放在字符類的任何地方,但是這不太清楚
  • +稱,前面的表達式(在我們的情況下,字符類)必須匹配一次或多次
  • $最後,這個斷言,我們現在是在主題

當你測試正則表達式的結束,你可能會發現像regexpal有用的工具。這允許您在寫入時實時查看您的正則表達式匹配(或無法匹配)您的示例數據。

+0

'。-_'表示'\ x2e- \ x5f',I.E一個範圍,如'a-z' – Esailija

+0

@ m.buettner很好,趕快! – Kelvin

+1

另外,如果你想逐元解釋正則表達式,你應該在正則表達式中使用[free-spacing mode](http://www.regular-expressions.info/freespacing.html)和'#'註釋。它更具可讀性,可以與所有評論一起復制到OP的代碼中。 –

2

查看a tutorial中正則表達式的基礎知識。它所需要的是二anchorsrepeatedcharacter class

^[a-zA-Z ._-]*$ 

如果使用不區分大小寫的修改,可以縮短這

^[a-z ._-]*$ 

注意的空間顯著(這只是一個字符像其他任何)。

+2

將其限制爲ASCII!一般而言,您需要像'^ [\ p {Upper} \ p {Lower} ._-] * $'或'^ [\ p {Letter} ._-] * $'。 – MRAB

+2

@MRAB通常是的,但並不是所有的正則表達式都支持(我們不知道OP的風格)。另外,他甚至可能不支持unicode輸入。最後,在考慮unicode屬性之前,OP應該首先學習正則表達式的基礎知識。 –

相關問題