2013-04-18 4 views
0

Вот jsFiddle: jsFiddleJavascript номер теста регулярное выражение недостаток - не может понять, почему

Соответствующий код:

var number = /\d+(.\d+)?/g; 

$('body').append(number.test(2.5) + "<br>"); 
$('body').append(number.test(20) + "<br>"); 
$('body').append(number.test(2) + "<br>"); 

Выход

true 
false 
true 
+2

Вы должны, вероятно, избежать периода, например, '\ .'. '.' сам по себе является подстановочным знаком – Phil

+0

@Phil - не связан, но ** истинно действительно ** ([обновленная скрипка] (http://jsfiddle.net/BUpyd/2/)). – jahroy

+0

@jahroy Это не проблема здесь, но это приведет к более ложным срабатываниям, таким как '2af' – Phil

ответ

7

Избавиться от g. Это не нужно, и это вызывает регулярное выражение потерпеть неудачу, потому что объект RegExp отслеживает его позицию, основываясь на предыдущем матче: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/test

Как Exec (или в комбинации с ним), тест называется несколько раз на тот же самый экземпляр глобального регулярного выражения будет продвигаться мимо предыдущего совпадения.

http://jsfiddle.net/BUpyd/1/

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