2010-12-17 81 views
3

昨天我有一個任務在字段上執行驗證,用戶可以在其中輸入他想下載的頁面範圍。JavaScript正則表達式(頁面範圍驗證)

閱讀一些教程後,我創建了這樣的模式在我看來應該工作,但它不會:(

你能不能給我一個提示,哪裏是錯誤的,或者應該怎麼做。在更好的方式

<script type="text/javascript"> 
var patt1=new RegExp("^(\s*\d+\s*\-\s*\d+\s*,?|\s*\d+\s*,?)+$"); 
document.write(patt1.test("1, 2, 3-5, 6, 8, 10-12")); 
</script> 

PS你可以在這裏進行測試:http://www.w3schools.com/js/tryit.asp?filename=tryjs_regexp_test

更多的例子:

  • 1匹配
  • 1-2匹配
  • -2不匹配
  • 1,2-3,圖4,5-7匹配
  • 1 2,3不匹配
  • 1-2-2不匹配

等等......像MS Office或Adobe PDF閱讀器

+0

請提供更多的例子。 – dheerosaur 2010-12-17 06:48:15

回答

7

你需要逃避反斜槓在字符串中,或​​JavaScript會帶他們出去或將其解釋爲轉義序列:

var patt1 = new RegExp("^(\\s*\\d+\\s*\\-\\s*\\d+\\s*,?|\\s*\\d+\\s*,?)+$"); 
+0

地獄,是啊!這就是我想念的!你統治:) – 2010-12-17 07:04:02

+0

@菲利普:不,你統治! – cdhowie 2010-12-17 07:05:34

4

你可以嘗試正則表達式:

^(\d+(-\d+)?)(,\d+(-\d+)?)*$ 

爲了讓你們之間的空格可以這樣做:

^(\s*\d+\s*(-\s*\d+\s*)?)(,\s*\d+\s*(-\s*\d+\s*)?)*$ 

Rubular link

+0

你的人也很酷!謝謝! – 2010-12-17 07:05:52

0

^((\\d+(\\-\\d+)?, ?)*(\\d+(\\-\\d+)?))+$

1

您可以使用正則表達式literal來定義patt1而不使用new RegExp。否則,您必須在正則表達式字符串中使用'\'來轉義所有'\'。

var patt1 = /^(\s*\d+\s*\-\s*\d+\s*,?|\s*\d+\s*,?)+$/g; 

現在patt1.test("1, 2, 3-5, 6, 8, 10-12")應該求truepatt1.test("1, 2, 3-5, 6, 8, 10-12,nocando")false

+0

也謝謝你,現在我有了不同。 – 2010-12-17 07:08:02