我試圖做一個正則表達式來驗證9和13數字之間的數字,但該序列可能有破折號和空格,理想是沒有更多比一個空間或連續衝刺。正則表達式,數字空格破折號限制爲8-13個數字
這個規則允許我控制9和13
/^[\d]{9,13}$/
現在的驗證,以補充破折號和空格
/^[\d -]{9,13}$/
我想我需要類似的東西,但我需要算號碼
/^[ -](?:\d){9,13}$/
任何提示?
我試圖做一個正則表達式來驗證9和13數字之間的數字,但該序列可能有破折號和空格,理想是沒有更多比一個空間或連續衝刺。正則表達式,數字空格破折號限制爲8-13個數字
這個規則允許我控制9和13
/^[\d]{9,13}$/
現在的驗證,以補充破折號和空格
/^[\d -]{9,13}$/
我想我需要類似的東西,但我需要算號碼
/^[ -](?:\d){9,13}$/
任何提示?
看起來你不想開頭或結尾的空格和破折號。這應該做到這一點。
/^\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$/
假設以下的空間中,或反之亦然破折號是確定:
^(-?|- ?)?(\d(-?|- ?)?){9,13}$
說明:
(-?|- ?)
- 這相當於(| -|-|-)
。請注意,此處不能有2個連續的破折號或空格,並且這隻能出現在開頭或緊接數字後面,因此可以防止字符串中出現2個連續的破折號或空格。
並且在(\d(-?|- ?)?)
中顯然必須只有一個數字,因此{9,13}
強制9-13位數字。
假設以下的空間中,或反之亦然破折號是不正常:
^[ -]?(\d[ -]?){9,13}$
類似於上面解釋。
以上兩者都允許字符串以數字,短劃線或空格開頭或結尾。
使用外觀aheads斷言各種因素的制約:
/^(?!.*( |--))(?=(\D*\d){9,13}\D*$)[\d -]+$/
可以有多個表達式來做所有事情嗎?還是有理由這樣做「一次完成」?有時候,清晰度勝過聰明......實際上,大部分時間。 – Floris
單獨使用正則表達式可能不是正確的工具。用正常的字符串函數檢查兩個連續的空格或破折號會更容易,該函數會查找這兩個特定字符串的出現。 – CBroe
這些空格/破折號是否以任何方式或習慣性(如電話號碼)顯着,並且可以忽略不計,您只需存儲數字而不格式化? – pawel