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

Mic*_*one 44 regex jquery

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

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

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

所以..你有输入.

<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>
Run Code Online (Sandbox Code Playgroud)

然后你就有了这个功能:

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

我警告确定更换是否正常.不是.

Mar*_*iek 149

这应该做到这一点

$('.sumit').val().replace(/[^\d.]/g, "");
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 如果经常执行此替换或在长字符串上执行此替换,则可能值得在字符组之后添加"+",因此当存在一系列非数字字符时,模式不必对每个字符执行一次替换.在这种情况下,我怀疑会有任何明显的性能提升,但如果没有其他的话,这是很好的做法.`=)` (4认同)
  • 另外,我相信使用\ D会起作用.\ D大致定义为^\d (4认同)

Sea*_*ean 26

马克是为所有非数字做的.如果你只想取出字母,短划线和$,(但是留下小数,例如),对你的原始版本的修改应该这样做:

$('.sumit').val().replace(/[A-Za-z$-]/g, "");
Run Code Online (Sandbox Code Playgroud)

(而且我个人更喜欢马克的更新答案,原因与他相同;你会抓住那些你无法预测的事情.)

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

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

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


tes*_*ssi 7

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

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

$('.sumit').val().replace(/[^0-9.]/g, "");
Run Code Online (Sandbox Code Playgroud)

如果您的RegEx引擎能够识别UTF-8,则速度会更快.一个示例语言,适用的是python3(http://docs.python.org/3/library/re.html - 搜索"\ d").在ECMA标准,然而,说对JavaScript \d等于[0-9].


Mik*_*ace 5

$('.sumit').val().replace(/\D/g, "");
Run Code Online (Sandbox Code Playgroud)

从sumit值替换所有非数值