2009-07-23 88 views
44

我試圖找到所有的字母和破折號和美元符號,並從文本框中刪除它們。如何使用正則表達式刪除字符串中的字母和破折號和美元符號?

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

我提醒,以確定是否更換工作。不是。

+0

這些都沒有說實話。我會更新你的我所擁有的。 我也試圖用3個輸入框做到這一點。 – 2009-07-23 18:46:47

+0

您應該將選擇器從.subit更改爲input.sumit - 性能更好。 – 2009-07-23 19:03:57

回答

26

馬克會爲所有非數字。如果你想只拿出字母,連字符和$,(但保留小數,例如),這種修改你原來應該這樣做:

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

(我個人比較喜歡馬克的最新答案出於同樣的原因他會這樣做;你抓住了所有你無法預測的方式。)

對於你更新的問題,值不變的原因是因爲val()返回一個新的字符串。它不會改變實際值。要做到這一點,請嘗試:

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

我還將它變成了each()調用,以便每個元素都將單獨完成。

149

這應該這樣做

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

[^]是一個否定的字符類,所以它會匹配所有字符除了那些在字符類上市。

在這種情況下,我們的字符類是\d(它是數字0-9)和一個句點(以允許十進制數字)。

我更喜歡這種方法,因爲它會捕獲任何東西這不是數字,而是不必擔心明確列出我不想要的非數字字符。

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

+4

如果這個替換是經常執行的還是長字符串執行,可能值得在字符組之後加一個'+',這樣當有一系列非數字時,模式不必爲每個字符執行一次替換字符。在這種情況下,我懷疑會有什麼明顯的表現增益,但是如果沒有其他的話,這是一個很好的做法。 `=)` – Blixt 2009-07-23 18:44:37

+4

此外,我相信使用\ D將工作。 \ D被粗略地定義爲^ \ d – CoderTao 2009-07-23 19:26:11

0

嘗試這樣:

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

替換所有非數值從SUMIT值

1

這爲我工作:

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

我想邁克與資本答案\ d,而不是否定一個\ d第一這對於一些理由並沒有爲我刪除括號和其他標點符號。否定\ d完美。

如果你想保留小數,也許在方括號內放一個點和其他符號。

PS我測試的環境是Titanium SDK。

7

我真的很喜歡馬克的回答。但是,根據您的編程語言(和RegEx引擎)\d匹配4或8等字符,它們是UTF-8 digits

所以,如果你只是想數字從0到9,使用[^0-9.]

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

這是更快,如果你的正則表達式引擎是UTF-8意識。一個示例語言,這適用於python3(http://docs.python.org/3/library/re.html - 搜索「\ d」)。然而,ECMA Standard表示,對於JavaScript \d等於[0-9]