2013-09-22 55 views
3

我試圖做一個正則表達式來驗證9和13數字之間的數字,但該序列可能有破折號和空格,理想是沒有更多比一個空間或連續衝刺。正則表達式,數字空格破折號限制爲8-13個數字

這個規則允許我控制9和13

/^[\d]{9,13}$/ 

現在的驗證,以補充破折號和空格

/^[\d -]{9,13}$/ 

我想我需要類似的東西,但我需要算號碼

/^[ -](?:\d){9,13}$/ 

任何提示?

+0

可以有多個表達式來做所有事情嗎?還是有理由這樣做「一次完成」?有時候,清晰度勝過聰明......實際上,大部分時間。 – Floris

+0

單獨使用正則表達式可能不是正確的工具。用正常的字符串函數檢查兩個連續的空格或破折號會更容易,該函數會查找這兩個特定字符串的出現。 – CBroe

+0

這些空格/破折號是否以任何方式或習慣性(如電話號碼)顯着,並且可以忽略不計,您只需存儲數字而不格式化? – pawel

回答

3

看起來你不想開頭或結尾的空格和破折號。這應該做到這一點。

/^\d([- ]*\d){8,12}$/ 

正則表達式:

\d   digits (0-9) 
(   group and capture to \1 (between 8 and 12 times) 
[- ]*  any character of: '-', ' ' (0 or more times) 
    \d  digits (0-9) 
){8,12} end of \1 

另一種選擇:一個數字,然後任意數量的空間或破折號8-12次,接着是數字。

/^(\d[- ]*){8,12}\d$/ 
4

請注意我的正則表達式是如何以數字開頭和結尾的。此外,這可以防止連續的空格和破折號。

/^\d([ \-]?\d){7,12}$/

+0

可能應該是'{8,12}'。 – Dukeling

+0

我原本是這樣做的,但注意到標題中另有說明。看到我上面的問題/評論。 – dana

0

假設以下的空間中,或反之亦然破折號是確定:

^(-?|- ?)?(\d(-?|- ?)?){9,13}$ 

說明:

(-?|- ?) - 這相當於(| -|-|-)。請注意,此處不能有2個連續的破折號或空格,並且這隻能出現在開頭或緊接數字後面,因此可以防止字符串中出現2個連續的破折號或空格。

並且在(\d(-?|- ?)?)中顯然必須只有一個數字,因此{9,13}強制9-13位數字。

假設以下的空間中,或反之亦然破折號是不正常:

^[ -]?(\d[ -]?){9,13}$ 

類似於上面解釋。

以上兩者都允許字符串以數字,短劃線或空格開頭或結尾。

0

使用外觀aheads斷言各種因素的制約:

/^(?!.*( |--))(?=(\D*\d){9,13}\D*$)[\d -]+$/ 
相關問題