Javascript正则表达式:验证双精度/浮点值
以下是我正在研究的模式:Javascript正则表达式:验证双精度/浮点值,javascript,regex,validation,floating-point,Javascript,Regex,Validation,Floating Point,以下是我正在研究的模式: var re = /(\d{1,2}\.(?=\d{1,2}))/; 我希望返回的是一个一位或两位数字(它永远不会大于24,因为它用于时间管理应用程序),后面可能会或可能不会跟一个小数点,后面有一个或两个尾随数字,但不超过两个 我不确定插入的子串匹配是否与前瞻性匹配。我只是猜测并嵌套了它们。最后,如果我的语法是正确的,我想我唯一缺少的是如何建议模式可能有或可能没有前导数字,可能有或可能没有包含带试用数字的十进制 如果你需要更多信息,请告诉我 更新,示例: 我们只与时间
var re = /(\d{1,2}\.(?=\d{1,2}))/;
我希望返回的是一个一位或两位数字(它永远不会大于24,因为它用于时间管理应用程序),后面可能会或可能不会跟一个小数点,后面有一个或两个尾随数字,但不超过两个
我不确定插入的子串匹配是否与前瞻性匹配。我只是猜测并嵌套了它们。最后,如果我的语法是正确的,我想我唯一缺少的是如何建议模式可能有或可能没有前导数字,可能有或可能没有包含带试用数字的十进制
如果你需要更多信息,请告诉我
更新,示例:
我们只与时间打交道,一天之内不会有更多的时间。24将是最高的投入
有效期:
23.75
1.4
1
0.5
0
.2
无效:
1.897
%#$#@$#
Words
other characters
最新更新:
因为这是一个小数,23.75行。我们不是数分钟,而是数小时的分数
另外,为了记录在案,我尝试使用方法和条件进行验证,它让字母在小数后通过。我已经决定使用正则表达式。你可以试试这个正则表达式
^(?![3-9]\d|[2][5-9]|24[.])\d{1,2}([.]\d{1,2})?$
但这里不需要使用正则表达式,只需将字符串解析为数字,然后检查它是否小于或等于24
([1]?[0-9])|((20)|(21)|(22)|(23)|(24)){0,1}([.][0-9]{0,2})?
编辑:我建议您只在正则表达式中进行简单的检查,并在其他地方测试语义正确性(例如小于24),因为它变得非常复杂。时间也不允许23:74,但允许23:59…如果“给定的任何数字都将小于24”,因此不需要单独测试,则以下表达式将起作用
^\d{0,2}(\.\d{0,2}){0,1}$
看
测试依据:
23.75 pass
1.4 pass
1 pass
0.5 pass
0 pass
.2 pass
1.897 fail
%#$#@$# fail
Words fail
other characters fail
说明:
^ start matching at the start of the string
\d{0,2} look for zero to two digits
( ){0,1}$ look for this next thing zero or one time, then the end of the string
\.\d{0,2} match exactly one decimal followed by up to two digits
注意-此正则表达式与“空字符串”不匹配。如果有可能会以某种方式出现在这个表达式中,您可能需要单独测试它
在javascript中测试的简单代码:
var str = "12.345";
var m = str.match(/^\d{0,2}(?:\.\d{0,2}){0,1}$/);
var goodTime;
if (!m) {
alert(str + " is not a good time");
}
else {
goodTime = m[0];
alert("found a good time: " + goodTime);
}
注意-我对
regex
进行了调整-在“小数点后的位”组中添加了?:
。这只意味着“匹配但不捕获”,因此结果将只返回匹配的m[0]
,而不是m[1]
中的组.34
。实际上这并不重要,因为我在m[0]中指定了goodTime
值(但仅当它是一个好时间时)。你可以在行动中看到这一点你能举几个例子说明你想为某个特定输入获得的输出吗?您确定分隔符总是一个
,并且从不说:
?如果输入是123.456
您希望发生什么?我用示例更新了条目。为什么要使用regex来执行此操作?您想用12.345做什么?它是有效的,无效的,你是把它截短到12.34还是四舍五入到12.35?您如何确定数字不会大于24,但它可能是一个字符串?关于12.89PM
,您想做什么?关于12,45
(这是欧洲人写12.45
的方式)注意23.75
是有效的-我认为OP使用的是“十进制时间”而不是HH:MM
,我将在其他地方检查空的、空的、未定义的等等。一旦字符串被验证并输入为double,我就必须进行其他检查。我得好好玩玩,但我想这会管用的。TY您不尝试替换-只需匹配:var str=“12.34”;var m=str.match(/^\d{0,2}(\.\d{0,2}){0,1}$/)代码>m[0]
将包含匹配项(如果存在)。否则它将是空的。我已经更新了我的答案,在最后加了一个“告诉你好像你什么都不知道”的字。。。别担心,我们都去过。让我知道它现在是否清楚和解决了-在这种情况下,您可能会决定“接受”给出的答案之一(带有小复选标记)。您是否使用我的代码的最新版本(2小时前更新)-即“在Javascript中测试的简单代码”?变量goodTime
中应该有正确的答案。。。两个技巧-我稍微更改了表达式(添加了?:
)并显式访问m[0]
,以获得答案。这一个不够高!感谢您提供的解决方案和酷站点Rubular