使用RegEx键入时验证用户输入
我很难按照以下标准编写正则表达式: 数字可以是正/负 可选-在开始时 小数点前的1到5个数字之间 小数点后2位(可选) 阻止用户键入超过1个字符。或- 这是我试图实现的正则表达式,但它对我不起作用使用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
^((-?[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反馈。我只是好奇,也许我错过了什么。一切都很好:-