2013-08-16 4 views
13

Я понял, что выставил счет за управление программным приложением после проверки своей программы. Я заметил следующую ошибку: моя таблица в sqlserver содержит: price numeric (6,2) пользователь моей программы вводит цену как 555,00 - это хорошо. , но когда он положил 555555, это ошибка, поэтому мне нужно указать маску, где мантисса является необязательной от 0 до 999, а десятичная часть программируется 2 или 3 в соответствии с выбором пользователя, я использую JQuery Masked входной плагин, и я не нашли хорошего регулярного выражения, пожалуйста, помогите, я работаю с jsp/servlet.Маска ввода для числовых и десятичных чисел

+0

Ehm ... если поле базы данных Числовой (6,2), то количество знаков после запятой не может быть «2 или 3 по к выбору пользователя ". Что мне не хватает? –

+0

Да, я изменил его в базе данных (6,3), десятичная двое или третья - только на дисплее. – najeh22

+0

, но проблема такая же: – najeh22

ответ

17

Вы можете использовать jquery numeric для номеров.
Текущая версия действительно позволяет то, что вы ищете, но кто-то changed код немного, и она работает:

HTML

<input class="numeric" type="text" /> 

Javascript

$(".numeric").numeric({ decimal : ".", negative : false, scale: 3 }); 

Это целое source.
И я подготовил это fiddle, чтобы вы могли видеть, как это работает.

+0

Я пробовал это http://jsfiddle.net/lun471k/4CHfC/but регулярное выражение здесь:/(\ d {1,14}) (\. \ d {1,3 }) {0,1} $/(регулярное выражение) является ложным. Мне нужна ваша помощь – najeh22

+0

Мне нужно просто заставить цифровые цифры до точки до 14 чисел maxmimum: 0.000 to 99999999999999.999 – najeh22

+0

, когда я использую точность 4, я могу ввести до 9999, то, что я хочу иметь с точностью 4, является 99.99 – najeh22

0

Теперь, когда я лучше понимаю, что вам нужно, вот что я предлагаю. Добавьте обработчик клавиатуры для вашего текстового поля, который проверяет содержимое текстового поля с этим регулярным выражением ^[0-9]{1,14}\.[0-9]{2}$, и если он не соответствует, сделайте красный фон или покажите текст или что угодно. Вот код, чтобы положить в document.ready

$(document).ready(function() { 
    $('selectorForTextbox').bind('keyup', function(e) { 
     if (e.srcElement.value.match(/^[0-9]{1,14}\.[0-9]{2}$/) === null) { 
      $(this).addClass('invalid'); 
     } else { 
      $(this).removeClass('invalid'); 
     } 
    }); 
}); 

Вот JSFiddle этого в действии. Кроме того, выполните одну и ту же сторону сервера регулярных выражений, и если она не соответствует, требования не были выполнены. Вы также можете сделать это, чтобы проверить событие onsubmit и не позволить пользователю отправлять страницу, если регулярное выражение не совпало.

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

+0

/^[0-9]{1,14}\.[0-9]{2}$/ неверно, есть что-то неправильное, потому что я могу ввести сюда числа столько, сколько хочу, буквы тоже – najeh22

+0

Я использую это, но ex не является правильной функцией checkDec (el) { var ex =/^ [0-9] {1,3} \. [0-9] {2} $ /; if (ex.test (el.value) == false) { el.value = el.value.substring (0, el.value.length - 1); } } – najeh22

+0

@ najeh22 Вы можете ввести все, что хотите, но в то время как введенный текст недействителен, фон станет красным, вот что я имею в виду, не применяя маски. Вы все равно должны выполнять валидацию на стороне сервера, так что регулярное выражение должно быть хорошим для проверки на стороне сервера и для предварительной отправки, если вам это нужно. Однако, если вы хотите, чтобы маска реального времени не позволяла вам вводить недопустимое значение, я бы пошел с решением LeftyX, так как это намного сложнее достичь (например, вы должны позволить пользователю ввести '2.', но это не допустимое значение, поэтому проблемы. – Bikonja

8

с помощью JQuery маска ввода плагин (6 целых и 2 знака после запятой):

HTML:

<input class="mask" type="text" /> 

JQuery:

$(".mask").inputmask('Regex', {regex: "^[0-9]{1,6}(\\.\\d{1,2})?$"}); 

Я надеюсь, что это помогает кто-то

+0

Nice Regex, спасибо. – Bigyellowbee

3

Вы может сделать это с помощью jquery inputmask плагин.

HTML:

<input id="price" type="text"> 

Javascript:

$('#price').inputmask({alias: 'numeric', 
         allowMinus: false, 
         digits: 2, 
         max: 999.99}); 
Смежные вопросы