Javascript数字输入(正则表达式)验证规则

时间:2014-02-17 11:09:23

标签: javascript jquery regex

我有点卡在这里。
关于会计数据的输入,分析师要求在文本框中输入十进制数据的一组特定规则 由于我此时尚未研究正则表达式,并且由于我在每项工作中都有非常严格的期限,所以我请求您的帮助。

规则是(模糊):

  • IE8 +兼容;
  • 将默认值设置为逗号后面的2位数;
  • 禁止除“。”,“,”和数字字符以外的其他字符;
  • 如果返回的号码中有多个分隔符,则只保留最后一个分隔符 说明:
    员工可能有不同的区域设置,逗号/点可以用作十进制或千位分隔符 如果员工副本 - 粘贴千位和小数分隔符,则必须将其忽略。

到目前为止我做了什么,但不满足要求:
http://jsfiddle.net/NxFHL/1/

$('#test_rules.numeric').on('blur', function(){
    var myString = $('#test_rules.numeric').val(); 
    myString = parseFloat(myString.replace(/[^\d.-]/g, '')); 
    myString = toFixed(myString, 2); 
    console.log(myString); 
}); 

function toFixed(value, precision) {
    var power = Math.pow(10, precision || 0);
    return 

String(Math.round(value * power) / power);
}

使用的正则表达式无法正常工作,因为它只接受点,而不是逗号 此外,我不确定我应该如何使它只留下最后一个分隔符(以便忽略千位分隔符)。

2 个答案:

答案 0 :(得分:1)

尝试此功能:

function parseInputNum(val) {
    var sep = val.lastIndexOf('.') > val.lastIndexOf(',')? '.' : ',';
    var arr = val.replace(new RegExp('[^\\d'+sep+']+', 'g'), '')
    .match(new RegExp('(\\d+(?:['+sep+']\\d+|))$'));
    return arr? arr[1].replace(/[,]/g, '.') : false;
}

答案 1 :(得分:0)

您可以使用此模式:

^(?:[1-9](?:[0-9]{0,2}(?:([.,])[0-9]{3})?(?:\1[0-9]{3})*|[0-9]*)|0)(?!\1)[.,][0-9]{2}$

此模式将检查以下数字:

123,45
12,45
0.45
123,456,789.12
1234.56
123.456.789,12

但不是数字:

12.23.45,12
012,345,678,91
1234,567.89
123,456,78

要将字符串转换为数字,您必须先删除千位分隔符。由于分隔符(如果存在)位于捕获组1中,因此可以轻松完成此操作。如果,用作小数分隔符,则必须将.替换为{{1}}。