2013-04-26 164 views
21

我需要在jQuery函數中使用貨幣正則表達式的幫助。正則表達式貨幣驗證

  • 它可以在開始時只允許「$」符號一次。
  • 它允許逗號作爲數字組分隔符,但不能在開頭或結尾。
  • 它只允許在小數點後舍入兩位數字。
  • 它只允許一個小數點,而不是在開始或結束。

有效期:

$1,530,602.24 
1,530,602.24 

無效:

$1,666.24$ 
,1,666,88, 
1.6.66,6 
.1555. 

我試過/^\$?[0-9][0-9,]*[0-9]\.?[0-9]{0,2}$/i;它工作正常,除了它匹配1,6,999

+4

你有什麼到目前爲止演示?它有什麼問題? – Wiseguy 2013-04-26 17:56:32

+0

我是jquery的新手,我不知道如何編寫正則表達式function.If你可以幫助我,這將是偉大的 – user2205924 2013-04-26 18:00:19

+1

你的問題與jQuery無關。在JavaScript中,您有方法'String.matches',例如'var str =「123.45」;如果(str.matches(/ YOUR_REGEX /))alert(「match」);其他警報(「不匹配」);'具體的正則表達式請參閱下面的答案。 – 2013-04-26 18:05:36

回答

-2

這裏是正則表達式,應該爲你做到這一點。

開始必須是數字或$符號。 可以有任意數量的帶逗號的數字,但它必須以數字開頭和結尾。 可以選擇在行尾有一個小數點,最多有兩位數。

var your_input = "$1,000,000.00"; 
var valid_dollar_amt_regex = /^\$?[0-9][0-9,]*[0-9]\.?[0-9]{0,2}$/i; 

if(valid_dollar_amt_regex.test(your_input)) 
    alert("Valid!"); 

或者使用此功能

function validate_money(i) { 
    var valid_dollar_amt_regex = /^\$?[0-9][0-9,]*[0-9]\.?[0-9]{0,2}$/i; 
    return valid_dollar_amt_regex.test(i); 
} 

看到它的工作:http://jsfiddle.net/znuJf/

+0

它工作正常,但它確實不適用於逗號。例如,120,0,00, – user2205924 2013-04-26 18:15:59

+0

小提琴滿足您的所有測試。 ,120,0,00,False http://jsfiddle.net/znuJf/1/ – Brent 2013-04-26 18:17:04

+2

小提琴不滿足這個測試print_results(「1,6,6677」);如果你能爲此提供幫助將會很棒。非常感謝。 – user2205924 2013-04-26 19:51:02

92

正則表達式

正則表達式擊穿

  • 當可選部分是過於寬鬆,我們需要向前看,並保證有一個號碼:(?=.*\d)
  • 可能會或可能不會與一個美元符號(我假設底片是無效的)開始:^\$?
    • 遵循與-?允許負數
  • 開始用1-3的數字:[1-9]\d{0,2}
    • 幾乎可以(\d{1,3}),但這將允許「0,123」
    • 有一個例外,在「$ 0.50」或「0」的情況下可以從0開始。50「:如果要禁止啓動與數字(,\d{3})*
      • \.之前刪除?|0
      • 這些正則表達式假設多個前導0無效
    • 任意數量的用逗號分隔的三個數字號碼的」 $「。
  • 要求或允許十進制(一位或兩位數字):\.\d{1,2}(\.\d{1,2})?分別爲
  • 結束與$(轉義),以確保沒有什麼後,一個有效的數字(如1,000.00b $)

要使用正則表達式,使用字符串的match方法和包住的正則表達式之間有兩個正斜槓。

// The return will either be your match or null if not found 
yourNumber.match(/(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/); 

// For just a true/false response 
!!yourNumber.match(/(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/); 

Basic Usage Example

測試用例

var tests = [ 
 
    "$1,530,602.24", "1,530,602.24", "$1,666.24$", ",1,666,88,", "1.6.66,6", ".1555." 
 
]; 
 

 
var regex = /(?=.*\d)^\$?(([1-9]\d{0,2}(,\d{3})*)|0)?(\.\d{1,2})?$/; 
 

 
for (i = 0; i < tests.length; i++) { 
 
    console.log(tests[i] + ' // ' + regex.test(tests[i])); 
 
    document.write(tests[i] + ' // ' + regex.test(tests[i]) + '<br/>'); 
 
}

+1

你應該創建一個jsFiddle來證明它,因爲這實際上似乎是正確的 – Ian 2013-04-26 18:26:13

+3

這是我見過的最好的正則表達式。恥辱OP沒有標記回答或評論爲什麼它不被接受。你有我的感激之情,無論:) – user1020853 2014-07-18 12:37:41

+0

我找不到最喜歡的答案!偉大的迴應。 – 2015-03-17 21:40:50