2014-01-27 2 views
1

Как проверить действительные числа в формате?java script, чтобы допустимые числа с запятой и точкой

Accepted:- 
    100,000 
    100,000.00 
    100,000.0000 
    10,000,000.00 
    0.00 
    10000.000 
Not Accept:- 
    ,100,00,. 
    ,.100.00 
    100.00,00 
    100..,, 

(только позволяют одну точку (десятичной точки) и несколько запятых, но число не должно начинаться или заканчиваться запятой или точкой, не должно быть никакого неправильного использования запятой и точки, как показано выше), я попытался следующий java-скрипт для него, но он не смог решить мою проблему. Можно ли обновить свою функцию ...

function isNumber(evt) { 
     var theEvent = evt || window.event; 
     var key = theEvent.keyCode || theEvent.which; 
     key = String.fromCharCode(key); 
     if (key.length == 0) return; 
     var regex = /^(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/; 
     //var regex = /^[0-9.,]+$/; 
     if (!regex.test(key)) { 
      theEvent.returnValue = false; 
      if (theEvent.preventDefault) theEvent.preventDefault(); 
     } 
    } 
+1

Вы на самом деле не пробовали, у вас? '/^(?: \ d + | \ d {1,3} (?:, \ d {3}) +) (?: \. \ d +)? $ /' –

+0

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

+0

Бла, пропустил заключительный паренс. Изменить '+) (?:' на '+)) (?:' –

ответ

0

Попробуйте

^(\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+|)$ 

Обосн .: Матч один на три цифры. Затем разрешите любое количество групп с запятой, за которой следуют три цифры. Если нет совпадений в предыдущем, попробуйте любое количество цифр (более одного). Затем разрешите дополнительные десятичные знаки. Изменение на

если десятичные знаки являются обязательными.

Заканчивать regex101

С уважением

+0

Просто заметили, что вы, кажется, допускаете группы с тремя цифрами. Правильно? В этом случае изменяйте значения внутри – ClasG

+0

его не работает.Если я использовал выше код, даже я не могу выбрать запятую и точку тоже. Можете ли вы обновить свой код. –

+0

Я пропустил, что вы разрешаете число без запятых. Отредактированный ответ Примечание: t проверять, используя этот набор WHILE. Только «при выходе». – ClasG

4

Попробуйте это:

var numRegex = /^(?:[1-9]\d{0,2}(?:,\d{3})*|0)(?:\.\d+)?$/; 

numRegex.test("1,000,000"); 
numRegex.test("100,000"); 
numRegex.test("100,000.00"); 
+0

не работает ng .... (его не разрешая даже, и. также) –

+1

номер, который вы вводите, должен быть действительным. означает ** 100,00.00 ** не является действительным номером формата вообще. Это должно быть ** 10,000.00 ** –

0

Если я не ошибаюсь, проблема не является (только?) С регулярным выражением, а с событием обработчик: он принимает один символ, создавая String от этого единственного символа, а затем сопоставляя его с регулярным выражением.

var key = theEvent.keyCode || theEvent.which; 
key = String.fromCharCode(key); 

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

Другой альтернативой является использование текстового поля и проверка содержимого поля, когда курсор покидает поле.

Если вам нужна помощь с этим, пожалуйста, добавьте информацию, в которой событие обрабатывается isNumber и какое взаимодействие вы хотите достичь (манипуляция с клавиатурой или текстовое поле или что-то еще).

EDIT:

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

Трудная вещь - первая, я фигурирую. Либо вы создаете обработчик событий только для текстового поля, которое необходимо проверить, либо (если есть несколько полей для проверки), вы создаете обработчик для элемента DOM, содержащего все эти поля, и смотрите event.target (и, надеюсь, браузеры, на которые вы нацеливаете, достаточно для поддержки этого), который дает вам элемент DOM, событие было вызвано.

+0

Я хочу проверить значение текстового поля, когда курсор покидает текстовое поле, если это возможно при наборе текста ... –

+0

Итак, вы хотите повернуть текстовое поле красным цветом до тех пор, пока не будет введено число (или, что то же самое, включить кнопку «отправить» только при вводе юридического номера)? См. Мой обновленный ответ для рецепта, чтобы сделать это. – virtualnobi

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