2013-04-26 101 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