Javascript根据regex测试值,如果需要,测试更高的值
在我的网页中,我有一个货币格式的总数,可以是正的,也可以是负的Javascript根据regex测试值,如果需要,测试更高的值,javascript,jquery,regex,Javascript,Jquery,Regex,在我的网页中,我有一个货币格式的总数,可以是正的,也可以是负的 Example $5.50 or $(5.50). 此值仅为span标记中包含的文本。我试图读取该值并将其转换为js中的数值,然后对其执行数学计算 Example $5.50 -> 5.50 and $(5.50) -> -5.50 我编写了以下正则表达式脚本来处理将负值货币值转换为数值的问题 var regex = /^\$*?\((\d+(\.)?(\d+)?)\)$/ 我有以下方法来处理检索和转换值 //r
Example $5.50 or $(5.50).
此值仅为span标记中包含的文本。我试图读取该值并将其转换为js中的数值,然后对其执行数学计算
Example $5.50 -> 5.50 and $(5.50) -> -5.50
我编写了以下正则表达式脚本来处理将负值货币值转换为数值的问题
var regex = /^\$*?\((\d+(\.)?(\d+)?)\)$/
我有以下方法来处理检索和转换值
//retrieve value from template
$.fn.fieldVal = function () {
var val;
if ($(this).is(':input')) {
val = $(this).val();
} else {
val = $(this).text();
}
return convertCurrencyToNumeric(val);
};
//convert currency to numeric value
function convertCurrencyToNumeric(n) {
var regex = /^\$*?\((\d+(\.)?(\d+)?)\)$/
n = n.replace(/[^0-9-\.]/g, '');
if(isNumber(n)) {
n = parseFloat(n);
return n;
}
return 0;
}
//test if numeric
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
我不清楚如何首先测试该值是否为负值,然后如果为负值,用regex结果替换该值 注意:在我看来,否定类确实可以解决正则表达式的问题。不,我不在乎JSLint对这个问题的看法。使用“.”既缓慢又笨拙,而且给出的特定lint gotcha的理由是荒谬的
function getMoney (str) {
var amount = str.replace(/(\$)(\()?(\d+\.\d{0,2})\)?/,
function (match, dollar, neg, money) {
var negSign = neg ? "-" : "";
return negSign + money;
}
);
return parseFloat(amount);
}
var str1 = "$(5.50)";
var str2 = "$5.50";
console.log( getMoney(str1) );
console.log( getMoney(str2) );
function convertCurrency(str){
var negMatch = ( str.match(/(^\$-|^-\$|^$\()/g) ), //handles -$5.05 or $-5.05 too
str = str.replace(/[^\d.]/g,''), //anything that's not a digit or decimal point
//gotcha, Europeans use ',' as a decimal point so there's a localization concern
num = parseFloat(str);
if(negMatch){ num *= -1; }
return num;
}
请注意在JavaScript中执行货币计算,因为数字对象是64位浮点数。你可能已经考虑过了,但我想我会把它放在那里,以防你没有给你一个想法:
alert(1.01+1.02)
@Eric Reppen,你是如何解决这个问题的?nvm,我正在使用一个回合来解决这个问题。我不确定我是否遵循了你的脚本。你如何填充构造器匹配,美元,负数,货币?