2012-10-16 24 views
-1

我需要一個正則表達式,它可以匹配由逗號分隔的1到1000之間的一串數字。從1到1000的csv數字的正則表達式

如:12,56,100,190,900,1000

我使用的前端和PHP上進行驗證後端的JavaScript。理想情況下,我需要一個通用的正則表達式,這對兩者都有效。

+1

這不是問題。你想做什麼?什麼不起作用? – Richard

+0

也請添加更多信息:您正在使用哪種語言?爲什麼是正則表達式而不是CSV解析器? –

+0

我需要只允許在1到1000之間用逗號分隔的html字段中的數字 –

回答

2

如果你想整行匹配匹配,不是這樣的事情應該做的:

^([1-9][0-9]{0,2}|1000)(,([1-9][0-9]{0,2}|1000))*$ 

根據您的要求,您可能還想在逗號開始,結束和/或之後留出空格。

這將允許空白的開頭:
^\s*([1-9][0-9]{0,2}|1000)(,([1-9][0-9]{0,2}|1000))*$

這將允許空白底:
^([1-9][0-9]{0,2}|1000)(,([1-9][0-9]{0,2}|1000))*\s*$

這將允許空格之後的逗號:
^([1-9][0-9]{0,2}|1000)(,\s*([1-9][0-9]{0,2}|1000))*$

結合這些根據你的喜好。

編輯2:如果你想允許一個逗號在合併或結束時,那麼你的正則表達式變得

^,?([1-9][0-9]{0,2}|1000)(,\s*([1-9][0-9]{0,2}|1000))*,?$ 

這裏,,?意味着你可以有0或1逗號。

編輯:解釋,如要求:

  • 在開始^$在最後輸入標記開始/結束 - 他們保證我們測試整個輸入
  • 括號只是工作就像你期望的那樣
  • [1-9]匹配數字1到9,類似地[0-9]匹配0到9的數字
  • {0,2}表示前面部分(在我們的情況下[0-9])存在0和2之間倍
  • |是邏輯OR - 它匹配或之前任一部分之後

因此,在第一組的一部分我們匹配數字1到9的括號,然後是0,1或2個數字0到9 - 這給了我們在1和999之間的數字 - 或者我們匹配1000.

然後我們匹配一個逗號,後跟上面描述的同一個塊 - 並且此批次匹配0次或更多次 - 如圓括號後面的*字符所示。

+0

謝謝aleks它工作正常。但我不太明白。你介意給出一個解釋 –

+0

@SaurabhSingh:哪一部分你不明白? –

+0

@TimPietzcker我不明白爲什麼它會給出一個錯誤,如果字符串是1或400,我的意思是最後一個字符是逗號 –

3

號範圍1-1000,分離逗號,是由

(?<=,|^)([1-9][0-9]{0,2}|1000)(?=,|$) 
+1

好,除非OP在javascript中需要它 –

+1

而且它不驗證整個字符串是否只包含有效數字。它只會從中選擇有效的數字。如果它重複應用於字符串。原來的問題很模糊,很難說這是否重要,但「驗證」這個詞讓我停下來。一個正確的值就足以讓正則表達式報告成功,很可能不是Saurabh想要的。 –

+0

此模式將匹配'123,abc' - 但他需要有一行CSV數字。 –