我想要的是,有一个最大长度为5的文本框。允许的值为..
我找到了这个页面,http://www.regular-expressions.info/refadv.html
所以我认为是
所以,我制作的正则表达式是..
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
整体表达式=&gt;
(?(?<=\d+)(?:[.]\d{1}){1}|(?:[.]\d{1}){1})+/gm
但它没有输出任何东西..
这是小提琴
ps:那里的pattern1和pattern2与我的previous question相关。
答案 0 :(得分:2)
也许你太复杂了。我做了一个快速测试,除非我遗漏了这个正则表达式似乎工作正常:
/^\d*\.?\d$/
演示: http://jsbin.com/esihex/4/edit
编辑:要检查长度,您可以在没有正则表达式的情况下执行此操作:
if ( value.replace('.','').length <= 5 && regex.test( value ) ) {
...
}
请注意,我使用replace
删除了这些点,因此在获取长度时它们不会被视为字符。
答案 1 :(得分:1)
您可以尝试以下模式:
/^\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
此模式假设该数字最多可包含五位数和一个可选的小数点。
如果最大长度为5包含可选的小数点,则模式稍微复杂一些:
/^(?:\d{1,5}|\d{0,3}\.\d)$/
该组的第一部分处理所需长度的整数,该组的第二个选项处理最大长度(包括小数点)为5的实数。
答案 2 :(得分:1)
考虑以下代码:
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 (?<=
(lookbehind)中,regexp无效。
将返回:
["45.3","32.2","32","44","432"]
所以可能是你所期望的。
答案 3 :(得分:0)
我不知道你正在尝试用你的正则表达式中的那些条件。我也看了你的jsfiddle,它没有为我输出任何内容。但我制作了两个版本的正则表达式,它与文本框的正确值匹配,即^(?!(.{6,}))(?:[1-9]\d*)*(?:\.\d*[1-9])?$
和^(?!(.{6,}))(?:\d*)*(?:\.\d*)?$
。
第一个不允许从零开始,或在小数点后以零结束。
如果您需要解释正则表达式,请注释。