如何使用正则expression式去除string中的字母和破折号和美元符号?

我试图find所有的字母和破折号和美元符号,并从文本框中删除它们。

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

这就是我所拥有的,我很确定这是错误的。 我用正则expression式不太好,但是我正在努力学习它们。 有没有人想帮助我,让我开始完成这个function?

所以..你有input。

 <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> 

那么你有这个function:

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

我警觉确定replace是否工作。 不是。

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

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

(我个人更喜欢马克的更新答案,因为他所做的一切,你抓住了一切,你无法预测这种方式。

对于你更新的问题,值不变的原因是因为val()返回一个新的string。 它不会改变实际的价值。 要做到这一点,请尝试:

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

我也做了一个each()的调用,以便每个元素都可以单独完成。

这应该做到这一点

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

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

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

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

如果你真的只想排除字母,$和 – ,那么肖恩的答案是更好的方法。

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

所以如果你只想从0到9的数字,使用[^0-9.]

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

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

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

取代sumit值中的所有非数字值

这对我工作:

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

我试着用大写字母D来回答Mike的答案,而不是首先否定一个\ d,因为某种原因我没有删除括号和其他标点符号。 否定\ d工作完美。

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

PS我testing的环境是Titanium SDK。

尝试这样的事情:

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