【问题标题】:Php only numbers Validating functionphp只有数字验证功能
【发布时间】:2012-05-11 12:43:04
【问题描述】:

我只想为数字创建一个验证函数,实际上我有那些可以正常工作的函数,我尝试自己创建一个,但不幸的是它不起作用。以下是字母数字和其他正常工作:

// Validators
private function custom($validator, $value)
{
    return call_user_func($validator, $value, $this->request, $this->id);
}

private function alphanumeric($value, $custom)
{
    return preg_match('/^(['.$custom.'a-z0-9_]*)$/i', $value);
}

private function valid_email($value)
{
    return preg_match('/^\S+@\S+\.\S+$/', $value);
}

我试图通过修改字母数字来创建一个:

private function numbers_only($value, $custom)
{
    return preg_match('/^(['.$custom.'0-9_]*)$/i', $value);
}

这个有什么问题?

编辑: 我还有一个 JS 帮助表单,对于字母数字,它是:

Form.prototype.alphanumeric = function(value, custom)
{
    return !value.replace(new RegExp('['+custom+'a-z0-9_]', 'ig'), '').length;
};

什么是仅用于数字的 JS?

【问题讨论】:

  • 使用 D 标志,除非您想允许尾随换行。

标签: php validation


【解决方案1】:

使用

is_numeric($value);

返回是真还是假

【讨论】:

  • 谨慎使用is_numeric()。像科学记数法 1e4 这样的东西会返回 true。
【解决方案2】:

如果您只需要数字,请从函数中删除 $custom 部分。 /i 表示不区分大小写的匹配,这与数字匹配无关,因此可以删除。

private function numbers_only($value)
{
    return preg_match('/^([0-9]*)$/', $value);
}

上面的表达式将匹配零个或多个数字,因此允许输入空白。要至少要求一个数字,请将 * 更改为 +,如

return preg_match('/^([0-9]+)$/', $value);

[0-9]+可以简写为\d+。由于您没有在匹配数组中捕获值,因此不需要通过包含 () 捕获组而增加的额外开销。也可以省略。

return preg_match('/^\d+$/', $value);

或者完全跳过正则表达式...

最后,如果您已经做到了这一点并且只匹配整数,那么这样做会更容易且资源消耗更少:

// If you really intend to match numbers only, and not all numeric values
// which might include .,
function numbers_only($value)
{
  return ctype_digit(strval($value));
}

【讨论】:

  • ctype_digit对应的JS是什么?
  • @Jamescoo 不要认为有一个。在 JavaScript 中,通常使用正则表达式。
【解决方案3】:

在 PHP 中,对于“仅数字”验证,您可以使用不同的方法:

  • is_int 或 is_integer
  • is_numeric
  • 正则表达式
  • ctype_digit
  • filter_var

is_integer()

对于此函数,这些值无效:“0010”、“123”

is_numeric()

对于这个函数,这些值是有效的:1.3、+1234e44 和 0x539

filter_var()

对于此函数,“00123”值无效

结论

似乎只有 regexctype_digit 可以正常工作。

测试

a simple test here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2012-08-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多