使用RegEx键入时验证用户输入

使用RegEx键入时验证用户输入,regex,validation,decimal,user-input,negative-number,Regex,Validation,Decimal,User Input,Negative Number,我很难按照以下标准编写正则表达式: 数字可以是正/负 可选-在开始时 小数点前的1到5个数字之间 小数点后2位(可选) 阻止用户键入超过1个字符。或- 这是我试图实现的正则表达式,但它对我不起作用 ^((-?[0-9]{1,5}(\.?){1,1}[0-9]{0,2}) 它应该允许用户键入以下数字 -1.12 12345 1 123 12.12 任何帮助都将不胜感激 如果要匹配以结尾的字符串,regex^-?\d{1,5}\.\d{0,2}???$应该可以工作。比如123 否则,将0更改为1

我很难按照以下标准编写正则表达式:

数字可以是正/负 可选-在开始时 小数点前的1到5个数字之间 小数点后2位(可选) 阻止用户键入超过1个字符。或- 这是我试图实现的正则表达式,但它对我不起作用

^((-?[0-9]{1,5}(\.?){1,1}[0-9]{0,2})
它应该允许用户键入以下数字

-1.12
12345
1
123
12.12
任何帮助都将不胜感激

如果要匹配以结尾的字符串,regex^-?\d{1,5}\.\d{0,2}???$应该可以工作。比如123

否则,将0更改为1,如下所示:^-?\d{1,5}\.\d{1,2}???$。然后它将只匹配小数点后有一个数字的字符串

您发布的正则表达式允许字符串在小数点后超过2位,因为它在2位之后停止匹配,即使字符串继续。在正则表达式末尾添加$会阻止它匹配在我们想要的部分之后继续的字符串

这个regex^-?\d{1,5}\.\d{0,2}?$将在用户完成键入后验证输入,因为我假设您不希望-在那一点上有效。

如果要匹配以结尾的字符串,regex^-?\d{1,5}.\d{0,2}???$应该可以工作。比如123

否则,将0更改为1,如下所示:^-?\d{1,5}\.\d{1,2}???$。然后它将只匹配小数点后有一个数字的字符串

您发布的正则表达式允许字符串在小数点后超过2位,因为它在2位之后停止匹配,即使字符串继续。在正则表达式末尾添加$会阻止它匹配在我们想要的部分之后继续的字符串


这个regex^-?\d{1,5}\.\d{0,2}?$将在用户完成键入后验证输入,因为我假设您不希望-在此时有效。

如果您想在键入时进行验证,可以使用可选组来接受中间值,并在处理值时对整个模式进行最终检查

^-?(?:\d{1,5}(?:\.\d{0,2})?)?$
解释

^字符串开头 -? 可选连字符 ?:非捕获组 \d{1,5}匹配1-45位 ?:非捕获组 \.\d{0,2}匹配一个点和0-2个数字 ? 关闭组并将其设置为可选 ? 关闭组并将其设置为可选 $字符串结尾 要验证最终模式,可以匹配可选的-、1-5位和可选的小数部分:

^-?\d{1,5}(?:\.\d{1,2})?$

如果要在键入时进行验证,可以使用可选组来接受中间值,并在处理值时对整个模式进行最终检查

^-?(?:\d{1,5}(?:\.\d{0,2})?)?$
解释

^字符串开头 -? 可选连字符 ?:非捕获组 \d{1,5}匹配1-45位 ?:非捕获组 \.\d{0,2}匹配一个点和0-2个数字 ? 关闭组并将其设置为可选 ? 关闭组并将其设置为可选 $字符串结尾 要验证最终模式,可以匹配可选的-、1-5位和可选的小数部分:

^-?\d{1,5}(?:\.\d{1,2})?$
你可以用

^-?\d{0,5}(?:(?<=\d)\.\d{0,2})?$

细节

^-字符串的开头 -? - 可选的- \d{0,5}-零到五位数 ?:?您可以使用

^-?\d{0,5}(?:(?<=\d)\.\d{0,2})?$

细节

^-字符串的开头 -? - 可选的- \d{0,5}-零到五位数
?:?是否有任何理由必须在一个正则表达式中执行所有这些检查?也许^-?\d{1,5}:\.\d{0,2}?$可以。@WiktorStribiżew Hello Wiktor,这适用于正数,但它不允许我键入负数,我必须先键入正数,然后在开始处添加负号。当我添加减号后删除数字时,它会同时删除第一个数字和减号-你知道为什么吗?然后试试^-?\d{0,5}:\。\d{0,2}$是的,或者使用^-?\d{0,5}:?有什么理由必须在一个正则表达式中执行所有这些检查吗?也许^-?\d{1,5}:\。\d{0,2}$可以。@WiktorStribiż你好,Wiktor,这适用于正数,但它不允许我键入负数,我必须先键入正数,然后在开始处添加负号。当我添加减号后删除数字时,它会同时删除第一个数字和减号-你知道为什么吗?然后尝试^-?\d{0,5}?:\。\d{0,2}?$是,或者使用^-?\d{0,5}:?您好,请查看我对原始问题的评论@奥利弗:我更新了我的答案。这个新的正则表达式应该可以完成这项工作。请记住,您可能不希望在用户完成键入后接受-作为有效输入,因此您必须使用另一个regexHello进行验证,请参阅我对原始问题的评论@奥利弗:我更新了我的答案。这个新的正则表达式应该可以完成这项工作。请记住,您可能不希望在用户完成键入后将其作为有效输入接受,因此您必须使用另一个regexHi进行验证,请参阅我对原始问题的评论@奥利弗,它坏了吗?您可以正确键入所有字符吗?它不允许我在字符串开头键入@Oliver这可以让你输入a-
字符串开头的第一个链接不正确,我已经更新了。您好,请查看我对原始问题的评论@奥利弗,它坏了吗?您可以正确键入所有字符吗?它不允许我在字符串开头键入@Oliver这将允许您键入a-在字符串的开头,第一个链接不正确,我已对其进行了更新。我不明白为什么查找会起作用,这不…^-??:\d{1,5}?:\。\d{0,2}???$它给出了相同的匹配@Thefourthbird抱歉,我现在不能完全测试它们。我相信你是对的,regexp是等效的,但是我已经看到了很多场景,我们仍然不知道OP使用了什么软件。所以,在这种情况下,我只是依靠OP反馈。我只是好奇,也许我错过了什么。一切都很好:-我不明白为什么后顾之忧会起作用,而这不…^-??:\d{1,5}?:\。\d{0,2}???$它给出了相同的匹配@Thefourthbird抱歉,我现在不能完全测试它们。我相信你是对的,regexp是等效的,但是我已经看到了很多场景,我们仍然不知道OP使用了什么软件。所以,在这种情况下,我只是依靠OP反馈。我只是好奇,也许我错过了什么。一切都很好:-