Javascript 正则表达式货币验证
我需要关于jQuery函数中的currency regex的帮助Javascript 正则表达式货币验证,javascript,regex,currency,Javascript,Regex,Currency,我需要关于jQuery函数中的currency regex的帮助 它可以选择在开始时只允许一次“$”符号 它允许逗号作为数字组分隔符,但不能在开头或结尾 它只允许在小数点后四舍五入两位数字 它只允许一个小数点,不允许在开头或结尾 有效: $1,530,602.24 1,530,602.24 $1,666.24$ ,1,666,88, 1.6.66,6 .1555. 无效: $1,530,602.24 1,530,602.24 $1,666.24$ ,1,666,88, 1.6.66,6
- 它可以选择在开始时只允许一次“$”符号李>
- 它允许逗号作为数字组分隔符,但不能在开头或结尾
- 它只允许在小数点后四舍五入两位数字
- 它只允许一个小数点,不允许在开头或结尾
$1,530,602.24
1,530,602.24
$1,666.24$
,1,666,88,
1.6.66,6
.1555.
无效:
$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,6999
之外,它工作正常。下面是一个正则表达式,它可以为您实现这一点
开头必须是数字或$符号。
可以有任意数量的带逗号的数字,但必须以数字开头和结尾。
可以选择在行尾有一个小数点,后面最多有两位数字
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);
}
查看它的工作情况:正则表达式
正则表达式分解
- 当可选部分过于宽松时,我们需要向前看并保证有一个数字:
(?=.*\d)
- 可能以美元符号开头,也可能不以美元符号开头(我假设负号无效):
^\$?
- 然后使用
允许负数-?
- 然后使用
- 以1-3个数字开头:
[1-9]\d{0,2}
- 几乎可以是
,但这将允许“0123”(\d{1,3})
- 有一个例外,在“$0.50”或“0.50”的情况下可以以0开头:
|0
- 这些正则表达式假定多个前导0无效
- 几乎可以是
- 由逗号分隔的任何三位数:
(,\d{3})*
- 如果要禁止以“$”开头的数字,请在
之前删除\.
。?
- 如果要禁止以“$”开头的数字,请在
- 需要或允许十进制(一位或两位):
或\.\d{1,2}
(\.\d{1,2})
- 以
(未跳过)结束,以确保有效数字(如$1000.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})?$/);
用测试用例演示
var测试=[
"$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})?$/;
对于(i=0;i ');
}
到目前为止您有什么?有什么问题吗?我是jquery新手,不知道如何编写正则表达式函数。如果你能帮助我,那就太好了。你的问题与jquery无关。在JavaScript中,有方法String.matches
,例如var str=“123.45”;如果(str.matches(/YOUR_REGEX/))警报(“match”);else警报(“不匹配”)代码>有关具体的正则表达式,请参见下面的答案。@Gary:谢谢,我打错了。不幸的是,我不能再编辑评论了@user2205924:该方法称为match
,(而不是matches
)。对不起,可能是重复的,但逗号不起作用。例如,120,0,00,小提琴满足您的所有测试,120,0,00,假小提琴不符合本测试打印结果(“1,66677”);如果你能帮上忙,那就太好了。非常感谢。它也会传递111111.00
,因为它只是匹配(几个数字+逗号),只要不以一结尾就无限期重复。我错过了一些其他的[0-9][0-9,]*
表示一个数字和任何数字或逗号,所以1,,,,,1.00
也匹配。另外,为什么有一个不区分大小写的标志用于数字?您应该创建一个JSFIDLE来证明这一点,因为这实际上似乎是正确的。这是迄今为止我见过的最好的正则表达式。羞耻OP没有标记为答案或评论为什么不被接受。不管怎样,我还是要感谢你:)我找不到最喜欢的答案!回答得很好。我试图删除“$”继续“\”,以禁止在“十进制和逗号可选”中使用美元符号,但它似乎仍在通过。有什么想法吗?(?=)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+(\.[0-9]{1,2})$@TR3B您双倍逃过了美元符号^\\\$
表示文本反斜杠,必须位于匹配的开始(^)和结束($)处。。。所以,就是那个角色。删除其中一个反斜杠。