Javascript数字输入(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);
}

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

试试这个函数:

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-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中。如果将,用作小数分隔符,则可能也必须将其替换为.

最新更新