我试图从jQuery / Javascript中的字符串中删除给定字符集£$€,.
的所有实例。我使用的是replace函数,但这只会删除该字符的单个实例,而不是全部。
例如,考虑字符串:
1,500,00.00.$djdjd£10€10
我回来了:
1500,0000.djdjd1010
如您所见,它只删除每个字符的单个实例。 £,
$
和€
很好,因为字符串中只有一个。
这是我到目前为止所做的:
function validatePriceRange(value, min, max) {
var replacements = ["£", "$", "€", ",", "."];
$.each(replacements, function (index, item) {
value = value.replace(item, "");
});
var value = parseInt(value, 10);
return value >= min && value <= max;
}
有人能发现我做错了吗?
答案 0 :(得分:6)
replace
只进行一次替换,而使用带有标记g
的正则表达式替换所有出现次数。
使用正则表达式,您还可以避免在数组上循环并在一次传递中执行:
value = value.replace(/£|\$|€|,|\./g,'');
答案 1 :(得分:1)
您只需在替换阵列中骑行一次,并在每次更换特定角色时进行更换。 但替换只是替换给定字符串的第一次出现。
对于替换所有方法,请查看
here
。
答案 2 :(得分:1)
我认为你不需要它的功能:
var validated = parseInt('1,500,00.00.$djdjd£10€10'.replace(/[£$€,.]/g,''), 10);
//=> 15000000
// or if you want the validated directly
var validated = function(min,max) {
var v = parseInt('1,500,00.00.$djdjd£10€10'
.replace(/[£$€,.]/g,''), 10);
return v >= min && v <==max;
}(1000, 200000); //=> false
如果要在字符串中包含所有数字,则正则表达式应该不同:
var validated = function(min,max) {
var v = parseInt('1,500,00.00.$djdjd£10€10'
.replace(/[^\d]/g,''), 10);
// ^ replace non numbers
// v now is 150000001010
return v >= min && v <==max;
}(1000, 200000); //=> false
答案 3 :(得分:0)
使用带有全局标志的正则表达式,它将搜索并替换所有实例
var replacements = ["£", "\\$", "€", ",", "\\."];
$.each(replacements, function (index, item) {
value = value.replace(new RegExp(item, "g"), '');
});
演示:Fiddle
答案 4 :(得分:0)
正如已经回答here,您可以使用以下正则表达式将所有非字符和空格替换为空。
var value = "1,500,00.00.$djdjd£10€10"
value = value.replace(/[^\w\s]/gi, '')