使用JavaScript进行印度货币验证的正则表达式

4
请问有人能告诉我如何使用正则表达式检查文本框中输入的金额(印度货币)是否有效吗?
我有几个条件:
1. 金额不应包含超过一个小数点,但可以有一个单独的小数点。
2. 如果有小数点,则应跟随一个或多个数字。
3. 金额应只包含数字,最多只有一个小数点。
4. 如果我输入像10.000这样的金额,则不应被接受,因为小数点后有3个连续的零。但是56.8906应该被接受。
5. 如果金额以零开头(即0123),则不应被接受,但0.0应该被接受。

2
为什么 56.8906 是有效的,而 10.000 不是? - JohnP
如果56.8906是美元,你如何给出56美元和'89.06'美分? - sv_in
并非全世界都在使用美元,这是卢比。 - mplungjan
有3个连续的零不是一个有效的数字。但是56.8906是有效的,因为只有在进行一些计算后才会显示金额... - Raghu
我现在正在谈论印度卢比。 - Raghu
显示剩余2条评论
6个回答

7
$(this).replace(/\B(?=(?:\d{3})+(?!\d))/g, ','); 
/*For US number system (millions & billions)*/

$(this).replace(/\B(?=(?:(\d\d)+(\d)(?!\d))+(?!\d))/g, ',');
/*For Indian number system (lakhs & crores)*/

这些将格式化相应系统中的值。


4
^(?:0|[1-9]\d*)(?:\.(?!.*000)\d+)?$

你需要做的是让它按照你希望的方式运行。
解释:
无需翻译。
^         # Start of string.
(?:       # Try to match...
 0        # either a 0
|         # or
[1-9]\d*  # an integer number > 0, no leading 0 allowed.
)         # End of integer part.
(?:       # Try to match...
 \.       # a decimal point.
 (?!      # Assert that it's not possible to match
  .*000   # any string that contains 000 from this point onwards.
 )        # End of lookahead assertion.
 \d+      # Match one or more digits.
)?        # End of the (optional) decimal part
$         # End of string.

在JavaScript中:

curRegExp = /^(?:0|[1-9]\d*)(?:\.(?!.*000)\d+)?$/;

1

将数字1000000格式化为12,34,567.00

<input id="item-purchase-amt" class="col-sm-12 form-control-plaintext tr-input" type="text" data-type="currency">

$(document).on('keyup', "input[data-type='currency']", function () {
formatCurrency($(this));
});
$(document).on('blur', "input[data-type='currency']", function () {
formatCurrency($(this), "blur");
});

function currencyNumber(n) {
// format number 1000000 to 1,234,567
// return n.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",")
// format number 1000000 to 12,34,567
return n.replace(/\D/g, "").replace(/(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/g, "$1,");
}

function formatCurrency(input, blur) {
var input_val = input.val();
if (input_val === "") { return; }
var original_len = input_val.length;
var caret_pos = input.prop("selectionStart");
if (input_val.indexOf(".") >= 0) {
    var decimal_pos = input_val.indexOf(".");
    var left_side = input_val.substring(0, decimal_pos);
    var right_side = input_val.substring(decimal_pos);
    left_side = currencyNumber(left_side);
    right_side = currencyNumber(right_side);
    if (blur === "blur") {
        right_side += "00";
    }
    right_side = right_side.substring(0, 2);
    input_val = left_side + "." + right_side;

} else {
    input_val = currencyNumber(input_val);
    input_val = input_val;
    if (blur === "blur") {
        input_val += ".00";
    }
}
input.val(input_val);
var updated_len = input_val.length;
caret_pos = updated_len - original_len + caret_pos;
input[0].setSelectionRange(caret_pos, caret_pos);
}

0

对于正则表达式中的印度货币验证,您应该使用以下表达式,确保有效:

  1. 它不会接受任何数字/金额前面的零位数和负号

下面是注释中的正则表达式:

String str="^^0-$";


^^0-$ - vikash Tiwari
我有点困惑。为什么你把答案的一部分作为注释给出?请编辑你的答案并在那里给出正则表达式。 - Andy A.

0

印度货币数字转换的正则表达式

$(this).val(parseFloat($(this).val(), 10).toFixed(2).replace(/(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/g, "$1,").toString());

外币数字转换正则表达式

$(this).val(parseFloat($(this).val(), 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,").toString());

0

印度货币正则表达式

/^(\d{1,2})(,\d{2})*(,\d{1,3}){1}(\.\d{1,})?$/g

美元正则表达式

/^(\d{1,3})(,\d{3})*(\.\d{1,})?$/g

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接