我有点卡在这里。
关于会计数据的输入,分析师要求在文本框中输入十进制数据的一组特定规则
由于我此时尚未研究正则表达式,并且由于我在每项工作中都有非常严格的期限,所以我请求您的帮助。
规则是(模糊):
到目前为止我做了什么,但不满足要求:
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);
}
使用的正则表达式无法正常工作,因为它只接受点,而不是逗号 此外,我不确定我应该如何使它只留下最后一个分隔符(以便忽略千位分隔符)。
答案 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}}。