2010-12-22 255 views
8

我試圖創建一個只允許字母大寫或小寫的正則表達式,以及空格,' - ','','','('和''' 。這是我迄今爲止,但由於某種原因,它仍然讓我輸入數字正則表達式只允許字母和一些字符

^[a-zA-Z -,.()]*$ 

任何幫助將是偉大的!謝謝。

+2

轉義爲正則表達式標記的字符:。() – 2010-12-22 15:40:38

+1

@ Mathias E:在字符組內部,您不必轉義所有正則表達式標記。 – unholysampler 2010-12-22 15:45:14

+0

這真的是你實際使用的正則表達式嗎? – Gumbo 2010-12-22 15:46:36

回答

3

好吧,有一個問題,-,被解釋爲一個範圍,如a-z,允許從空間到逗號的所有字符。逃避並至少應該修復一些錯誤。

^[a-zA-Z \-,.()]*$ 

嚴格地說,你應該也難逃.(),也因爲那些在正則表達式的特殊含義。 Javascript正則表達式引擎(我正在測試的)似乎在[]的上下文中直接解釋它們,但總是明確得多。

^[a-zA-Z \-,\.\(\)]*$ 

然而,這仍然不應該被允許0-9數字,因此您的實際代碼,使用這個正則表達式可能有一些問題,以及。

12

-是特殊的字符類。它用於定義一個範圍,如您對a-z所做的那樣。

要匹配你需要或者逃避它或將它,使得它會不會充當運營商範圍內字面-

^[a-zA-Z \-,.()]*$ 
     ^^ escaping \ 

^[-a-zA-Z ,.()]*$ 
^placing it at the beginning. 

^[a-zA-Z -,.()-]*$ 
      ^placing it at the end. 

並且很有意思

^[a-z-A-Z -,.()]*$ 
    ^placing in the middle of two ranges. 

在最後的情況下-a-zA-Z之間的地方,因爲這兩個周邊-(我們想從字面上對待一個)是zA已經參與範圍,在-人物簡直是再處理。

在所有提及的方法中,推薦使用轉義方法,因爲它使您的代碼更易於閱讀和理解。任何看到\的人都會期望逃脫的目的。將-置於開頭(結束)會產生問題,如果您稍後在字符類中之前(之後)添加字符而不逃避-,則會形成一個範圍。

2

 -, in [a-zA-Z -,.()]描述從 (0x20)到,(0x2C)的範圍。這相當於[ !"#$%'()*+,]。您應該跳過-或將其放置在不被解釋爲範圍指示符的地方。

但這不是這個問題的原因,因爲數字是從0x30到0x39。

0

我試過用JavaScript,它工作正常。其他人都是正確的,但。如果在JavaScript中,檢查是否一切正常,否則檢查不會發生。

相關問題