我有点困在这里了
关于会计数据的输入,分析师要求在文本框中输入一套特定的十进制数据规则
由于我目前还没有学习正则表达式,而且我有非常严格的截止日期来完成每项工作,所以我请求您的帮助。
规则是(关于模糊):
- 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中。如果将,
用作小数分隔符,则可能也必须将其替换为.
。