Javascript 什么';这个正则表达式(if-else regex)有什么问题
我想要的是,有一个最大长度为5的文本框。允许的值为Javascript 什么';这个正则表达式(if-else regex)有什么问题,javascript,regex,Javascript,Regex,我想要的是,有一个最大长度为5的文本框。允许的值为 任何整数//例如1、3、9、9239都是有效的 实数,小数点后精确一点//例如1.2,93.7有效,61.37,55.67无效 还允许只输入小数点和小数点后的数字,即.7为有效输入(将被视为0.7) 我找到了这个页面, 所以我想的是 有一个数字 如果后面有一个数字和一个小数,那么后面必须有一个数字 如果没有数字,则必须有一个小数点和其后的一个数字 所以,我做的正则表达式是 a single digit one or more => /d+
所以我想的是
a single digit one or more => /d+
an optional decimal point followed by exactly one digit => (?:[.]\d{1})?
if first condition matches => (?(first condition) => (?((?<=\d+)
then, match the option decimal and one exact digit =>(?((?<=\d+)(?:[.]\d{1})?
else => |
find if there is a decimal and one exact digit => (?:[.]\d{1}){1}
check the whole condition globally => /gm
单个数字一个或多个=>/d+
一个可选的小数点,后跟正好一个数字=>(?:[.]\d{1})?
如果第一个条件匹配=>(?(第一个条件)=>(?(?(?)|
查找是否有一个十进制和一个精确数字=>(?:[.]\d{1}){1}
全局检查整个条件=>/gm
整体表达式=>
(?(?<=\d+)(?:[.]\d{1}){1}|(?:[.]\d{1}){1})+/gm
(?(?也许你把事情弄得太复杂了。我做了一个快速测试,除非我遗漏了什么,否则这个正则表达式似乎工作正常:
/^\d*\.?\d$/
演示:
编辑:要检查无需正则表达式即可完成的长度:
if ( value.replace('.','').length <= 5 && regex.test( value ) ) {
...
}
if(value.replace('..,'').length我不知道你想用正则表达式中的那些条件做什么。我还查看了你的JSFIDLE,它对我来说什么都不输出。但是我制作了两个版本的正则表达式,它们与文本框的正确值相匹配,分别是^(?({6,}))(?:[1-9]\d*)*(?:\.\d*[1-9])$
和^(?)?!(.{6,}))(?:\d*)*(?:\。\d*)?$
第一个不允许以零开始,或在小数点后以零结束
如果需要解释正则表达式,请进行注释。您可以尝试以下模式:
/^\d{0,4}\.?\d$/
它似乎满足了您的所有要求:
> /^\d{0,4}\.?\d$/.test(".4")
true
> /^\d{0,4}\.?\d$/.test(".45")
false
> /^\d{0,4}\.?\d$/.test("1234.4")
true
> /^\d{0,4}\.?\d$/.test("12345.4")
false
> /^\d{0,4}\.?\d$/.test("12345")
true
> /^\d{0,4}\.?\d$/.test("123456")
false
此模式假定数字最多可以有五位数字和一个可选的小数点
如果五的最大长度包括可选小数点,则模式稍微复杂一些:
/^(?:\d{1,5}|\d{0,3}\.\d)$/
组的第一部分处理所需长度的整数,组的第二个选项处理最大长度(包括小数点)为5的实数。考虑以下代码:
var checkedString = "45.3 fsd fsd fsdfsd 673.24 fsd63.2ds 32.2 ds 32 ds 44 fasd 432 235f d653 dsdfs";
checkedString = " "+checkedString;
var results = checkedString.match(/[\s]{1}(\d+\.*\d{1})(?![\d\.\w])+/gm);
results.map(function(result) {
return result.trim();
});
因为在JS(?在您的示例中,.7
返回false
,根据他想要的,它应该是true
。嗯,.7
返回true,如果允许尾随零,那么它将像/^\d*\\一样简单。?\d0*$/
您在示例中忘记了一个/
,这就是它不起作用的原因。请注意,JavaScript reg前任不支持lookback。@Bergi:终于!它不起作用的原因是什么
["45.3","32.2","32","44","432"]