2009-04-20 22 views
0

朋友,使用正則表達式和Javascript替換方法

我是新來的Javascript和正則表達式,希望你能幫助!

在Javascript函數內,我需要檢查逗號(,)是否出現1次或更多次。如果確實如此,那麼應該有一個或多個數字的任何一方。

例如

1,000.00是確定

1,000,00是確定

,000.00是不正常

1,000.00是不正常

如果這些條件都滿足我想要的逗號1000.00變成1000.00

我試過的是:

var x ='1,000.00';

var regex = new RegExp(「[0-9] +,[0-9] +」,「g」);

var y = x.replace(regex,「」);

alert(y);

當運行警報顯示「.00」這不是我期待或想要的!

在此先感謝您提供的任何幫助。

強大的文本 編輯 強大的文本

感謝所有的輸入到目前爲止並給出了三​​個答案。不幸的是,我認爲我沒有足夠好地解釋我的問題。

我想實現的是:

如果在文本中的逗號和有一個或多個數字兩側的它,然後刪除逗號,但留下的字符串的其餘部分是。

如果文本中有一個逗號,並且它的任何一邊都沒有至少一個數字,則什麼也不做。

因此,使用我的例子從上面:

1,000.00變得1000.00

1,000,00變得100000

,000.00原樣保留,000.00

1,000.00保留爲1 ,, 000.00

道歉的混亂!

+0

出了什麼問題只是刪除所有字符串中的逗號...例如與string.replace( ' '''); – James 2009-04-20 10:56:06

+0

感謝評論吉米。那也是我的第一個解決方案!不幸的是,某些字段允許將逗號作爲格式的一部分。所以在我讓用戶離開這個領域之前,他們已經輸入了一個逗號,然後在任何一方都至少有一個數字。基本上,它阻止用戶進入1 ,,,,,,,,,,,,,,,, 000等 – 2009-04-20 11:22:17

回答

4

您的正則表達式對於高於1000的訂單不會很靈活,並且它對於沒有逗號的輸入有問題。更有問題的是,您也正在匹配並替換您感興趣的部分數據!

更好的是有一個正則表達式匹配問題的形式並刪除它們。

以下匹配(按順序)逗號在輸入的開頭,在輸入的末尾,前面是一些非數字,後面跟着一些非數字。

var y = x.replace(/^,|,$|[^0-9]+,|,[^0-9]+/g,''); 

順便說一句,如果你碰巧能夠做到lookbehind但幾乎所有的JS實現不這一切要容易得多。

編輯基於問題的更新:

好吧,我不會試圖理解爲什麼你的規則,因爲他們,但正則表達式變得更簡單解決這個問題:

var y = x.replace(/(\d),(\d)/g, '$1$2'); 
+3

您可以通過反轉串並做了前瞻...... – James 2009-04-20 10:55:19

+0

當然,好點的模擬回顧後,但OP將需要做前瞻和後退。你可以基準它,如果它是重要的,但我認爲多次操作會比上述正則表達式笨重。 – annakata 2009-04-20 11:08:52

2

我將使用類似下面的:

^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)$ 
  • [0-9] {1,3}:1至3位數小號
  • ([0-9] {3})*:由逗號分隔[可選更位數三胞胎
  • (\ [0-9] +):[可選]點+多個數字

如果這個正則表達式匹配,你知道你的號碼是有效的。之後用空字符串替換所有的逗號。

1

在我看來,你有三個錯誤情況

  1. 」,1000"
  2. 「1000,」
  3. 「1,000」

如果其中任何一個是真的,那麼你應該拒絕該領域,如果他們都是假的,那麼你可以以正常方式去除逗號並繼續前進。這可以是一個簡單的交替:

^,|,,|,$ 
1

,我只想通過parseFloat()刪除任何東西,除了數字和小數點分隔符([^0-9.])和發送輸出:

var y = parseFloat(x.replace(/[^0-9.]+/g, "")); 
1
// invalid cases: 
// - standalone comma at the beginning of the string 
// - comma next to another comma 
// - standalone comma at the end of the string 
var i, 
    inputs = ['1,000.00', '1,000,00', ',000.00', '1,,000.00'], 
    invalid_cases = /(^,)|(,,)|(,$)/; 
for (i = 0; i < inputs.length; i++) { 
    if (inputs[i].match(invalid_cases) === null) { 
     // wipe out everything but decimal and dot 
     inputs[i] = inputs[i].replace(/[^\d.]+/g, ''); 
    } 
} 
console.log(inputs); // ["1000.00", "100000", ",000.00", "1,,000.00"]