2013-05-05 56 views
0
  • 正則表達式1:檢查數字3和6之間這三個正則表達式是否有效?

    var myRegxp = /^([0-9]){3,6}$/; 
    
  • 正則表達式2:檢查是否有數字3和6之間

    var myRegxp = /^([0-9_]){3,6}$/; 
    
  • 常規表達式3:檢查3至6之間的數字以及dash

    var myRegxp = /^([0-9_-]){3,6}$/; 
    

問題:

  1. 爲什麼這一切完美地工作了3和6之間的數字匹配?
  2. _(下劃線)在第二個和第三個表達式中的含義是什麼?

回答

5

這些檢查每個檢查3到6個字符的序列。

第一個只允許3個數字。

第二個允許3個字符,但除了數字還包括下劃線。

第三個允許3個字符,但除數字外還包括下劃線和破折號。

這些是否「有效」取決於您要完成的工作。短劃線對於允許負數是有用的,但是更嚴格的正則表達式會要求短劃線處於第一位,並且仍然允許3到6個額外的數字。

在回答你關於下劃線的問題時,它只是第三個正則表達式中另一個允許的字符。這是一個完全合法的正則表達式。


如果你仔細分析第三正則表達式,你會得到這樣的:

^表示字符串的你是匹配的開始

()意味着捕捉到什麼是括號之間分開的結果。它不會影響匹配的結果,但會影響結果返回的方式。

[]表示它可以匹配那些括號中的任何內容的字符集。

[0-9]表示0到9之間的任何字符將構成匹配的字符範圍。

[0-9_-]表示與上面相同的範圍,但還包括下劃線字符和連字符。

{3,6}表示您希望匹配3-6次出現的前一個正則表達式元素。

$意味着字符串的結束


因此,在第三正則表達式,你要尋找的字符串的開頭,後跟3-6個字符,可以是一個數字位,一個下劃線或連字符後面跟着字符串的結尾。


舉例來說:

"444" - matches all three 
"-44" - matches the second or third 
"_-4" - matches the third 
"4" - matches none 

如果你想,允許3-6位數字,可以是正的或負的正則表達式,那麼你可以使用這樣的事情:

/^[+\-]?\d{3,6}$/ 

這允許可選的前導連字符或加號,後面跟3-6位數字。

+0

所有這三個都是完全有效的? – Kevin 2013-05-05 22:15:09

+0

@Kevin - 它們是有效的正則表達式,每個都完成稍微不同的事情。 – jfriend00 2013-05-05 22:17:29

4

[0-9]的意思是「在什麼範圍從09」,或者換句話說,數字(其可以與\d也表示)。括號表示分組,但在此不必要。 {3,6}的意思是「以前的事情必須出現三到六次」。 ^$指示正則表達式必須匹配整個字符串。

[]中的下劃線表示它也與數字一起是有效字符。

他們都是有效的正則表達式,但做不同的事情:

  • 第一個允許只有三到六位。
  • 第二個只允許三到六位數字或下劃線。
  • 第三個只允許三到六位數字,下劃線或連字符。

您想使用哪一個取決於您認爲有效的數據。例如,如果連字符無效,則不會使用第三個連字符,因爲它接受連字符。如果你想禁止下劃線,那麼你最好使用第一個下劃線,因爲所有其他的都允許下劃線。你甚至可以做一個正則表達式來允許數字和破折號,但不會強調下劃線:/^[\d-]{3,6}$/

相關問題