2017-03-31 125 views
1

我想測試一個用戶字符串是否「迄今爲止」,因爲它可能不是一個有效的整體,但它是一個有效的子集。如何獲得正則表達式匹配的有效部分

我有一個正則表達式,例如^ [0-9] {4} - [0-9] {4} - [0-9] {4} - [0-9] $ 這樣「1234-1234 -5678-5678「有效

」1234-12「或甚至」1「不匹配模式,但它是一個有效格式的有效子集,換句話說,輸入到目前爲止是確定的。

有沒有一個很好的方法做到這一點,而沒有製造許多正則表達式,它的星期五。

+0

所以1234年至1212年是否有效? – funcoding

+0

考慮例如''AAAAAc'.match(/ A + B | C /)'。根據你的說法,「AAAAA」是否爲「有效子集」? – georg

回答

2

不知道如果我深知你的問題,但我認爲你想有這樣的事情:

^([0-9]{4}-){1,3}[0-9]{1,4}$ 

Working demo

這將匹配組的4位,並且可以具有從1到4位

最後一組enter image description here

您也可以縮短與您正則表達式:

^(\d{4}-){1,3}\d{1,4}$ 
+0

我喜歡這一個......但要覆蓋所有的基地,你可以將它改爲「{0,3}」 – sln

+0

還有一個問題是,它不會匹配'1234-',在那裏有一個晃動的短劃線,除非它被改爲'{0,4}'總而言之,這是最快的方法。 – sln

+0

嗯,我給了你一票,希望op接受這個...... – sln

0

您可能可以使用一個最終的正則表達式來驗證您當前擁有的表單,並且可以使用用戶輸入的動態正則表達式對每個子集都有效。

我的想法是有([0-9] {1,4} - )+

+0

,但這將使「1-2」有效,它不是 – Arthur

0

對於你的情況,這將檢查作爲一個類型:

/^(\d(\d(\d(\d(-(\d(\d(\d(\d(-(\d(\d(\d(\d(-(\d)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?$/ 
0

此正則表達式,你鍵入將匹配鍵鍵,雖然它有點麻煩。

^([0-9]{1,4}|[0-9]{4}-[0-9]{0,4}|[0-9]{4}-[0-9]{4}-[0-9]{0,4}|[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{0,4})$ 

Here is a live example

相關問題