2010-12-17 2 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 Reader

+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

@Filip: Нет, вы правы! – 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

1

Вы можете определить patt1 без new RegExp, используя регулярное выражение literal. В противном случае вам придется избегать всех «\» в строке регулярных выражений (используя «\\»).

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

Теперь patt1.test("1, 2, 3-5, 6, 8, 10-12") должны вычисляться true, patt1.test("1, 2, 3-5, 6, 8, 10-12,nocando") к false

Смежные вопросы