无法理解为什么Javascript正则表达式不起作用
Cannot fathom out why Javascript regex not working
我想验证一些输入,以检查它是否是格式的正货币值
0.5
、0.55
、5
(注意这个)、5.5
、5.55
、55
等
我使用的代码是:
if ($("#gross").val()>0 && !/^'d+?'.?'d?'d$/.test($("#gross").val())) {
alert($("#gross").val() + " is invalid currency");
}
它适用于除单个数字以外的所有数字,例如5
(和5.
),但适用于5.5
。
我做错了什么?
您忘记在$
之前的末尾添加?
。更好的方法是:
/^'d+?'.?'d{0,2}$/
这会检查数字最多有两个小数位——如果你想检查任何金额,你可以使用以下内容:
/^(?!'.$)(?:(?!0'd)('d*)'.?('d[0-9]*))$/
请注意,最好显式地将字符串转换为数字,并缓存#gross
的值。
var grossVal = $("#gross").val();
if (+grossVal > 0 && !/^'d+?'.?'d{0,2}$/.test(grossVal)) {
alert(grossVal + " is invalid currency");
}
+?
将匹配尽可能少的匹配项,在本例中为1位。
我想你正在寻找这样的东西:
/^'d+('.'d{0,2})?$/
这将是一系列数字,可能后面跟着一个小数,介于0到2位之间。
考虑使用交替将正则表达式分解为a|b|c|d
形式。
然后我们可以使用几种不同的形式,比如:
a = 0 -- 0
b = [1-9]'d* -- n (non-zero integer), n cannot start with 0
c = 0[.]'d{1,2} -- 0.x or 0.xy
d = [1-9]'d*[.]'d{1,2} -- n.x or n.xy, n (non-zero integer)
这将允许我们拒绝像09
和1.
这样的值,因为它们不在所接受的任何单个表单中。
相关文章:
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 将javascript正则化为vb
- 将po-box javascript正则表达式转换为c#regex
- 被javascript正则表达式分组卡住了
- 从字符串中提取年份的Javascript正则表达式
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- JavaScript正则表达式匹配量
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- javascript正则表达式来识别所有特殊字符
- Javascript-正则表达式,用于在未转义字符上拆分字符串,例如|,但忽略|
- 查找所有注释的JavaScript正则表达式
- javascript正则表达式验证未按预期工作
- javascript正则表达式,用于匹配带数字和不带数字的字符串
- 模仿负查找以匹配JavaScript正则表达式中没有紧跟特定字符的模式
- JavaScript正则表达式(带_-的字母数字字符)
- 用特定的javascript正则表达式替换每个单词
- 搜索日历事件的Javascript正则表达式
- 如何获取 JavaScript 正则表达式子匹配的位置
- 正则表达式子字符串以JavaScript开始和结束