【发布时间】:2012-11-26 13:59:34
【问题描述】:
我有一个在我的代码中使用的函数。该函数期望传递的参数是一个正整数。由于 PHP 是松散类型的,因此数据类型并不重要。但它很重要,它只包含数字。目前,我正在使用正则表达式来检查值,然后再继续。
这是我的代码的简化版:
function do_something($company_id) {
if (preg_match('/\D/', $company_id)) exit('Invalid parameter');
//do several things that expect $company_id to be an integer
}
我来自 Perl 背景,经常使用正则表达式。但是,我知道它们的用法存在争议。
我考虑使用intval() 或(int) 和强制 $company_id 是一个整数。但是,我最终可能会得到一些意想不到的值,我希望它快速失败。
另一个选项是:
if (!ctype_digit((string) $company_id)) exit('Invalid parameter');
这种情况是正则表达式的有效使用吗?一种方式优于另一种方式吗?如果是这样,为什么?有没有我没有考虑过的问题?
【问题讨论】:
-
ctype_digit有什么问题? -
我看到
ctype_digit的唯一缺点是它必须先转换为字符串。但是,我发现regex更易于阅读,而且我已经习惯了。我试图确定是否有令人信服的理由转换。
标签: php regex validation