2016-07-05 3 views
0
new RegExp('^\\d+[.]?([0,2,5,7]?[0,5])?$').test(236.70) 

Почему этот код не работает для 123.20 и 123.70? В то время как он успешно тестирует следующие входы:Regex не соответствует нумерации

123.00, 123.05, 123.25, 123.50, 123.55, 123.75

+1

Попытка передать строки вместо цифр :) –

+2

Вы не должны ставить запятые в классе символов, если вы не собираетесь соответствовать запятые. Также следует предпочесть литерал регулярного выражения. '/^\ d + \.? ([0257]? [05]?) $ /' – 4castle

+0

Спасибо @ 4castle, это помогло –

ответ

3

Вы передаете значение 236.70 и, скорее всего, JavaScript лишает последнего 0 так 236.70 == 236.7. Затем он не совпадает с последней частью регулярного выражения, где вы соглашаетесь с окончанием [0,5].

Вместо этого нанесите его на строку, чтобы заставить конечный 0 оставаться там.

+1

Спасибо @fedorqui –

3

В вашем регулярном выражении есть некоторые синтаксические ошибки. В той части, где вы сопоставляете десятичную, у вас есть ? за пределами круглых скобок, когда она (вероятно) должна быть внутри, и у вас есть , s в вашем классе персонажей, даже если вы не пытаетесь их сопоставить.

Классы символов ([]) требуют, чтобы вы отобразили отдельных символов, которых вы хотите сопоставить. Вы также можете получить диапазон символов, используя - (например, [0-9]).

new RegExp('^\\d+[.]?([0257]?[05]?)$').test(236.70) 
+0

Спасибо @Rocket Hazmat –

+0

новый RegExp ('^ ([5-9 ] [1-9] [0-9]) ([.])? ([0257]? [05])? $ '). Test (00.50) VM37068: 1 Uncaught SyntaxError: отсутствует) после списка аргументов Почему я получаю эту ошибку ??? –

+0

@vikkyDevil: '00.50' неправильный номер. Попробуйте '0.50',' 0.5' или даже просто '.5'. –