2015-02-22 1 views
2

Разрешить пользователям вводить число больше 0 "и/или" максимум 2 десятичных знака.не разрешать ноль с помощью регулярного выражения

Ожидаемый Выходной формат: 123.45или 1.46или 34234.23или 34.04или 0.33

не нравится: 67.6787или 45.546.65или 0

Ниже код работает отлично, но он принимает '0'

$('input').keyup(function() { 
    if(!(/^\d+(\.{0,1}\d{0,2})?$/.test(this.value))) 
      this.value = this.value.substring(0, this.value.length - 1); 
}); 

HTML

<table> 
    <tr> 
    <td> 
     <asp:TextBox ID="txt1" runat="server" Width="50"/> 
    </td> 
    </tr> 
</table> 
+0

Я не понимаю. Вы пытаетесь избежать того, чтобы пользователь добавлял нулевой начальный/конечный результат? У вас возникнет проблема с активным обнаружением конечного нуля, так как вы не сможете определить, будет ли пользователь вводить другую цифру. Лучше всего заключить, что они заканчивают нули после отправки значения. Если вы ищете начальный ноль, вам просто нужно определить первый символ как 0. – Dan

+0

Другими словами, я должен разрешить пользователям вводить> 0. – Uba

+0

Чтобы уточнить ваш вопрос, вы говорите следующее: 0.123 = недействительный, 123.450 = недействительный, 12.304 = действительный? – Dan

ответ

2

Вы можете использовать регулярные выражения на основе отрицательного опережения к disallow 0:

/^(?!0(\.0*)?$)\d+(\.?\d{0,2})?$/ 

RegEx Demo

Это позволит:

0.1 
1.0 
345.67 
1.1 
1.23 

Это не позволит:

0. 
0 
0.0 
0.00 
45.56.45 
+0

, но этот вариант позволяет использовать 0,1 в одном сценарии. Например, введите 1 и переместите курсор до 1 и введите «0». – Uba

+0

Я был неправ. Конечно, .1> 0. Я пойду с /^(?!0(\.0*)?$)\d+(\.{0,1}\d{0,2})?$/ – Uba

+0

В этот случай, /^(?!0(\.0*)?$)\d+(\.{0,1}\d{0,2})?$/ не позволяет мне вводить 0,1 в прямом порядке – Uba

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