Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式货币验证_Javascript_Regex_Currency - Fatal编程技术网

Javascript 正则表达式货币验证

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

我需要关于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
.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}
    • 几乎可以是
      (\d{1,3})
      ,但这将允许“0123”
    • 有一个例外,在“$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您双倍逃过了美元符号
^\\\$
表示文本反斜杠,必须位于匹配的开始(^)和结束($)处。。。所以,就是那个角色。删除其中一个反斜杠。