2012-07-31 72 views
0

我建立這應該接受字符串只與下列格式的應用程序:JS正則表達式只允許數字,分號和連字符

  1. 12345(僅一個數字)
  2. 12345; 23456(兩個或兩個以上由分隔的數字;)
  3. 12345-12367(一系列由分隔的數字 - )

的Java腳本的正則表達式應僅允許上述格式&不應接受任何其他格式或符號。任何人都可以想出一個正則表達式嗎?

+1

您不能使用正則表達式來保證最後一個是有效範圍。 – 2012-07-31 14:03:15

+0

如果你使用分號作爲字段之間的分隔符,也許你應該'拆分'字符串並檢查每個元素是否與其他兩個條件匹配。 – 2012-07-31 14:03:20

+0

前兩個很簡單:'/ ^(\ d +)(; \ d +)?$ /' – 2012-07-31 14:04:16

回答

1

這是你所需要的正則表達式:/^\d+((;\d+)*|-\d+)?$/

(;\d+)*將檢查分隔多個號碼「;」

-\d+將檢查範圍

+0

如果是字符類中的第一個或最後一個字符,我猜不需要跳過連字符。 – 2012-07-31 14:06:32

+0

做了一個編輯,我逃過了一切,我不知道:) – micnic 2012-07-31 14:09:41

+0

同樣在這裏'=]'只是評論,因爲一些人更喜歡代碼「更清潔」(少不必要的轉義)。 – 2012-07-31 14:10:44

1

嘗試

^[0-9]+([;-][0-9]+)?$ 

這應該工作

[0-9]+匹配1個或多個數字 [; - ]匹配;-

(...)?是一個可選匹配

^錨開始和$錨繩

+0

添加錨'^ $'... – 2012-07-31 14:06:31

+0

啊謝謝,我只是這樣做;) – 2012-07-31 14:07:40

0

假設你正在尋找數部分的結束是每次5個位數,下面應該匹配你想要什麼。

[0-9]{5}((;|-)[0-9]{5}){0,1} 

如果需要不同的長度,則可以更新{5}與任一另一固定長度或諸如{3,5}的範圍爲3至5的數字串。如果你希望能夠與speperators上市捕捉到超過兩個號碼,可以用

[0-9]{5}((;|-)[0-9]{5})* 
0

^[0-9 - ] {0,50} $

0- 9只接受數字

- ;只允許 - 和;

{0,50}只允許50個字符

相關問題