如何使用正则表达式删除字符串中的字母和短划线以及美元符号?

时间:2009-07-23 18:26:32

标签: jquery regex

我正在尝试查找所有字母和破折号以及美元符号,并将其从文本框中删除。

function numbersOnly()
{
    if ($('.sumit').val().indexOf([A-Za-z-$])) {
        $('.sumit').val().replace([A-Za-z-$], "");
    }
}

这就是我所拥有的,我很确定这是错的。我对正则表达式并不太满意,但我正在努力学习它们。有没有人想帮助我,让我开始完成这个功能?

所以..你有输入。

<div class="numInputRight"><input type="text" class="sumit" name="sumAmount1"></div>
<div class="numInputRight"><input type="text" class="sumit" name="sumAmount2"></div>
<div class="numInputRight"><input type="text" class="sumit" name="sumAmount3"></div>

然后你就有了这个功能:

numbersOnly = function()
{
  $('.sumit').val().replace(/[A-Za-z$-]/g, "");
  alert($('.sumit').val());
  return false;
}   

我正在警告确定替换是否正常。不是。

6 个答案:

答案 0 :(得分:149)

这应该这样做

$('.sumit').val().replace(/[^\d.]/g, "");

[^]是一个否定的字符类,因此它将匹配字符类中列出的所有字符。

在这种情况下,我们的字符类是\d(数字0-9)和句点(允许十进制数字)。

我更喜欢这种方法,因为它会捕获任何不是数字的,而不必担心明确列出我不想要的非数字字符。

如果真的只想排除字母,$和 - ,那么Sean's回答是更好的方法。

答案 1 :(得分:26)

马克是为所有非数字做的。如果你只想取出字母,破折号和$,(但是留下小数,例如),对你的原文的修改应该这样做:

$('.sumit').val().replace(/[A-Za-z$-]/g, "");

(我个人更喜欢Mark的更新答案,原因与他相同;你抓住了那些你无法预测的一切。)

对于您更新的问题,值未更改的原因是因为val()返回一个新字符串。它不会改变实际值。为此,请尝试:

$('.sumit').each(function() { 
    $(this).val($(this).val().replace(/[A-Za-z$-]/g, "")); 
});
alert($('.sumit').val());

我也把它变成了一个each()调用,这样每个元素都可以单独完成。

答案 2 :(得分:7)

我真的很喜欢马克的回答。但是,根据您的编程语言(和RegEx引擎)\d匹配4或8等字符UTF-8 digits

因此,如果您只想要0到9之间的数字,请使用[^0-9.]

$('.sumit').val().replace(/[^0-9.]/g, "");

如果您的RegEx引擎支持UTF-8,则速度会更快。适用的语言示例是python3(http://docs.python.org/3/library/re.html - 搜索“\ d”)。但是,ECMA Standard表示JavaScript \d等于[0-9]

答案 3 :(得分:5)

$('.sumit').val().replace(/\D/g, "");

从sumit值

替换所有非数值

答案 4 :(得分:1)

这对我有用:

$('.sumit').val().replace(/[^\d]/g, "");

我尝试了迈克的答案与首都\ D而不是否定一个\ d首先由于某种原因没有删除括号和其他标点符号给我。否定\ d完美无缺。

如果你想保留小数,也可以在方括号内加上一个点和其他符号。

PS我测试的环境是Titanium SDK。

答案 5 :(得分:0)

尝试这样的事情:

function numbersOnly()
{
    $('.sumit').val().replace(/[\w-$]/g, "");
}