Проверка валюты - PullRequest
       31

Проверка валюты

22 голосов
/ 09 февраля 2010

Пожалуйста, помогите мне написать Проверка JavaScript для поля валюты / денег.

Поэтому, пожалуйста, укажите любые регулярные выражения , если у вас есть :)

Кроме того, для моего региона не нужны символы валюты , такие как '$' в поле.

Для проверки в качестве специальных символов должны быть включены только десятичные числа ., Вместе с числами.

Ответы [ 5 ]

38 голосов
/ 09 февраля 2010

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

var regex  = /^\d+(?:\.\d{0,2})$/;
var numStr = "123.20";
if (regex.test(numStr))
    alert("Number is valid");

Если вы не хотите быть настолько строгими с десятичными знаками, вам может быть проще использовать унарный оператор (+) для приведения кчисло, чтобы проверить его действительность:

var numStr = "123.20";
var numNum = +numStr; // gives 123.20

Если числовая строка недействительна, она вернет NaN (не число), что вы легко можете проверить:

var numStr = "ab123c";
var numNum = +numStr;
if (isNaN(numNum))
    alert("numNum is not a number");

Это, конечно, позволит пользователю добавлять больше десятичных разрядов, но вы можете отключить любой дополнительный, используя number.toFixed(2), чтобы округлить до 2 десятичных разрядов.parseFloat намного менее строг с вводом и вырвет первое найденное число из строки, если эта строка начинается с числа, например.parseFloat("123abc") даст 123.

27 голосов
/ 02 августа 2012

Я построил свой ответ из принятого ответа.

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

^[1-9] Номер должен начинаться с 1-9
\d* Номер может содержать любое количество любых цифр.
(...)$ посмотрите на следующую группу с конца (...)$
(...)?(...)? Ищите две группы по выбору. Первая для запятой, вторая для десятичной.
(,\d{3}){1} Ищите одно вхождение запятой, за которым следуют ровно три цифры
\.\d{0,2} Ищите десятичную дробь, за которой следуют ноль, одна или две цифры.

Это регулярное выражение работает по следующим правилам:

  • Допустимые значения: числа 0-9, запятая и десятичная точка.
  • Если клиент вводит более одной десятичной запятой или более одной запятой, значение недопустимо и не будет принято.

  • Примеры неправильных значений ввода

    • 1.2.3
    • 1,2,4
  • Примеры допустимых значений ввода
    • 1,23
    • 1000
    • 3967.
    • 23
  • 999,999.99

Пример можно увидеть здесь: http://jsfiddle.net/rat141312/Jpxu6/1/

UPDATE

, изменив [1-9] в регулярном выражении на [0-9], можно также проверить любое число, меньшее 1. Пример: 0,42, 007

1 голос
/ 09 февраля 2010
/[1-9]\d*(?:\.\d{0,2})?/

[1-9] - must start with 1 to 9
\d* - any number of other digits
(?: )? - non capturing optional group
\. - a decimal point
\d{0,2} - 0 to 2 digits

это работает для вас? или может быть parseFloat :

var float = parseFloat( input );
0 голосов
/ 24 декабря 2018

 let amount = document.querySelector('#amount'), preAmount = amount.value;
        amount.addEventListener('input', function(){
            if(isNaN(Number(amount.value))){
                amount.value = preAmount;
                return;
            }

            let numberAfterDecimal = amount.value.split(".")[1];
            if(numberAfterDecimal && numberAfterDecimal.length > 3){
                amount.value = Number(amount.value).toFixed(3);;
            }
            preAmount = amount.value;
        })
<input type="text" id="amount">
0 голосов
/ 27 мая 2017

Для меня это нормально работает для индийской валюты в индийских рупиях

var regex = /^[1-9]{0,2}(,{0,1})(\d{2},)*(\d{3})*(?:\.\d{0,2})$/;
var a = '1,111.11';
regex.test(a); 
...