需要正则表达式匹配十进制数而不带前导0

时间:2011-05-26 16:44:33

标签: php mysql regex

它应匹配0.1,1,.01,但不匹配01,00.1或任何带字符的内容。

我正在尝试确定是否应该在将值放入mysql insert语句之前引用和转义值。我必须注意一些varchar键,这些键可以是数字,前导0如果作为数字插入则会被截断。

如果可用的话,我还会使用内置的php或mysql函数。

编辑:这个似乎涵盖了我的所有基础:

/^([1-9][0-9]*(\.[0-9]+)?|0\.[0-9]+|\.[0-9]+|0)$/

3 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

([1-9]\d*(\.\d+)?)|(0?\.\d+)

答案 1 :(得分:1)

这适合您的例子:

preg_match('#^(?=[1-9]|0\.|\.\d)\d*(\.\d+)?$#', $num)

?=断言确保它以1-90.开头,因此排除任何其他前导零。您可能希望限制\d+可以匹配的decmals数量。

答案 2 :(得分:1)

试试这个:

(?:^|\s|,)((?:(?:[1-9]\d*|0)(?:\.\d+)?)|(?:\.\d+))(?:$|\s|,)

请参阅here

^((?:(?:[1-9]\d*|0)(?:\.\d+)?)|(?:\.\d+))$

如果它们出现在一行中。请参阅here