PHP 正则表达式不能正常工作
PHP Regex Not Quite Working
我正在使用以下正则表达式:
^[0-9.,]*(([.,][-])|([.,][0-9]{2}))?$
我使用这个正则表达式来检查有效价格——所以它 catches/rejects 诸如 xxx
或 llddd
或 34.23dsds
之类的东西
并允许 100
或 120.00
之类的东西
它的问题似乎是,如果它是空白的(空的),它会被认为是有效的,但它不应该——有什么想法可以改变它吗??
谢谢
使用你的正则表达式解决 "don't match blanks" 问题:
^[0-9.,]+(([.,][-])|([.,][0-9]{2}))?$
*
允许0个或更多,而+
允许1个或更多,因此*
允许空格但+
不允许,而是必须至少是一位数字。
编辑:
你应该稍微清理一下这个正则表达式
^[0-9]+(?:[.,-](?:[0-9]{2})?)?$
这样就解决了","的匹配
http://www.regextester.com/?fam=95185
编辑 2:@Fuzzzzel 指出这与大小写“50,-”不匹配,我们假设您想要匹配并且删除捕获组是假定的。这是我建议的正则表达式的最新版本:
^[0-9]+([.,-](-|([0-9]{2}))?)?$
您的问题之一是您在正则表达式中使用了代表 "any character" 的点。如果你的意思是一个点,你需要像这样转义它 \.
此外,您应该至少有一个数字,因此请将星号 *
换成 +
换成 "one or more"。
然后你可以有 .,.,.,.,.,.,- 如果你不删除第一部分的逗号和点:
^[0-9]+(([\.,][-])|([\.,][0-9]{2}))?$
我正在使用以下正则表达式:
^[0-9.,]*(([.,][-])|([.,][0-9]{2}))?$
我使用这个正则表达式来检查有效价格——所以它 catches/rejects 诸如 xxx
或 llddd
或 34.23dsds
之类的东西
并允许 100
或 120.00
之类的东西
它的问题似乎是,如果它是空白的(空的),它会被认为是有效的,但它不应该——有什么想法可以改变它吗??
谢谢
使用你的正则表达式解决 "don't match blanks" 问题:
^[0-9.,]+(([.,][-])|([.,][0-9]{2}))?$
*
允许0个或更多,而+
允许1个或更多,因此*
允许空格但+
不允许,而是必须至少是一位数字。
编辑:
你应该稍微清理一下这个正则表达式
^[0-9]+(?:[.,-](?:[0-9]{2})?)?$
这样就解决了","的匹配
http://www.regextester.com/?fam=95185
编辑 2:@Fuzzzzel 指出这与大小写“50,-”不匹配,我们假设您想要匹配并且删除捕获组是假定的。这是我建议的正则表达式的最新版本:
^[0-9]+([.,-](-|([0-9]{2}))?)?$
您的问题之一是您在正则表达式中使用了代表 "any character" 的点。如果你的意思是一个点,你需要像这样转义它 \.
此外,您应该至少有一个数字,因此请将星号 *
换成 +
换成 "one or more"。
然后你可以有 .,.,.,.,.,.,- 如果你不删除第一部分的逗号和点:
^[0-9]+(([\.,][-])|([\.,][0-9]{2}))?$