如何使用preg_match - ,+ ,.值?

时间:2011-06-15 15:45:54

标签: php regex numbers

我使用此preg_match条件来匹配正值,负值和小数值

/^[0-9,-\.]{1,50}$/

但是当我输入-34.000时它没有显示错误,当我输入34 ... 9868时它没有显示错误, 我想要的是它必须只接受正,负和十进制值。

4 个答案:

答案 0 :(得分:4)

如果您需要检查它是否为数字,请使用is_numeric()之类的内容。

你的正则表达式完全崩溃了,因为现在它甚至只能接受一个包含50个点的字符串

答案 1 :(得分:4)

如上所述,有更好的方法可以检测给定的输入字符串是否为数值。如果您想坚持使用正则表达式,以下内容可能适合您:

/^-?[0-9]+(?:\.[0-9]+)?$/

说明:

  • 匹配字符串的开头(^
  • 匹配可能的-字符(-?); ?表示“不需要”
  • 至少匹配一个号码([0-9]+
  • 可能匹配括号中的整个语句((?:...)?); ?:表示“不捕获子模式”
    • 一点(\.); .由于其特殊功能而需要进行转义
    • 至少一个号码([0-9]+
  • 匹配字符串的结尾($

答案 2 :(得分:2)

您需要拆分正则表达式,以便它只接受正确位置的字符。例如:

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

解释这个表达式:

[+\-]?:这会检查数字的+或 - 前缀。它完全是可选的,但只能是+或 - 。

([0-9]+,)*:这允许一组可选的逗号分隔数字。这是成千上万的等等。

[0-9]+:这要求该值至少包含一些数字

(\.[0-9]+)?:最后,这允许带有尾随数字的可选小数点。

答案 3 :(得分:0)

试试这个正则表达式^-?\d*\.?\d+$ 我想它不能限于50个字符