2015-01-28 5 views
0

В рамках Livecycle я подтверждаю, что введенный номер - от 0 до 10 и позволяет использовать четверть часа. С помощью этого post я написал следующее.Livecycle RegExp - проблема с десятичной точностью

if (!xfa.event.newText.match(/^(([10]))$|^((([0-9]))$|^((([0-9]))\.?((25)|(50)|(5)|(75)|(0)|(00))))$/)) 
    { 
     xfa.event.change = ""; 
    }; 

Проблема в том, что периоды не принимаются. Я попытался обернуть \. в скобках, но это тоже не сработало. Поле представляет собой текстовое поле без специального форматирования и код в событии изменения.

ответ

1

Yikes, это сложное регулярное выражение. Это может быть упрощена много:

/^(?:10|[0-9](?:\.(?:[27]?5)?0*)?)$/ 

Объяснение:

^    # Start of string 
(?:   # Start of group: 
10   # Either match 10 
|    # or 
[0-9]  # Match 0-9 
(?:   # optionally followed by this group: 
    \.   # a dot 
    (?:[27]?5)? # either 25, 75 or 5 (also optional) 
    0*   # followed by optional zeroes 
)?   # As said before, make the group optional 
)    # End of outer group 
$    # End of string 

Test это live on regex101.com.

+0

Благодарим за включение объяснения! Он почти работает, он не примет '2' или' 7'. – turkaffe

+0

@silviak: Не уверен, что вы имеете в виду. Он должен принимать '25' или' 75', и он не должен принимать '2' или' 7', правильно? Я добавил предварительный просмотр в regex101. –

+0

Тестирование '.25' или' .75', когда я набираю '.25', он не примет' 2' и переходит к '5'. Я думаю, может быть, потому, что он находится на событии изменения, и он ищет всю строку? – turkaffe

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