【问题标题】:PHP regular expression for numbers and commas only仅适用于数字和逗号的 PHP 正则表达式
【发布时间】:2011-11-07 01:12:24
【问题描述】:

我需要创建一个正则表达式来验证逗号分隔的数值。

它们应该看起来像:1,2,3,4,5 等等......

该值必须是单个数字,例如:1 前后不能有空格,前后不能有逗号。

或者...多个数值,以逗号分隔。第一个和最后一个字符必须是数字。

我有以下代码,但它只检查数字和逗号,没有特定的顺序:

我怎样才能改变下面的正则表达式来适应上面的描述?

谢谢!

// get posted value
if(isset($_POST['posted_value']))
{
    $sent_value = mysqli_real_escape_string($conn, trim($_POST['posted_value']));
    if(preg_match('/^[0-9,]+$/', $posted_value))
    {
        $what_i_need = $posted_value;
    }
    else
    {
        $msg .= $not_what_i_need;
    }
}
else
{
    $msg .= $posted_value_not_set;
}

【问题讨论】:

  • 只是为了说明编辑的原因,您说的是this,而您的意思是this

标签: php regex


【解决方案1】:

应该这样做:

/^\d(?:,\d)*$/

解释:

/            # delimiter
  ^          # match the beginning of the string
  \d         # match a digit
    (?:      # open a non-capturing group
      ,      # match a comma
      \d     # match a digit
    )        # close the group
    *        # match the previous group zero or more times
  $          # match the end of the string
/            # delimiter

如果您允许多位数字,请将\d 更改为\d+

【讨论】:

  • 多位数字使用 /^\d+(?:,\d+)*$/
【解决方案2】:

您是否允许用户输入带有逗号的数字,例如5,0005.6 这样的小数呢?

或者,您可以使用类似这样的 explode 来验证输入。

$values = explode(',',$sent_value);
$valid = true;

foreach($values as $value) {
    if(!ctype_digit($value)) {
        $valid = false;
        break;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    相关资源
    最近更新 更多