正則表達式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}$/;
問題:
- 爲什麼這一切完美地工作了3和6之間的數字匹配?
_
(下劃線)在第二個和第三個表達式中的含義是什麼?
正則表達式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}$/;
問題:
_
(下劃線)在第二個和第三個表達式中的含義是什麼?這些檢查每個檢查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-9]
的意思是「在什麼範圍從0
到9
」,或者換句話說,數字(其可以與\d
也表示)。括號表示分組,但在此不必要。 {3,6}
的意思是「以前的事情必須出現三到六次」。 ^
和$
指示正則表達式必須匹配整個字符串。
[]
中的下劃線表示它也與數字一起是有效字符。
他們都是有效的正則表達式,但做不同的事情:
您想使用哪一個取決於您認爲有效的數據。例如,如果連字符無效,則不會使用第三個連字符,因爲它接受連字符。如果你想禁止下劃線,那麼你最好使用第一個下劃線,因爲所有其他的都允許下劃線。你甚至可以做一個正則表達式來允許數字和破折號,但不會強調下劃線:/^[\d-]{3,6}$/
所有這三個都是完全有效的? – Kevin 2013-05-05 22:15:09
@Kevin - 它們是有效的正則表達式,每個都完成稍微不同的事情。 – jfriend00 2013-05-05 22:17:29