我正在用PHP为我的管理面板编写一个成员搜索表单。 搜索条件只有一个字段,我希望脚本确定它是否应该在数据库中搜索电子邮件地址、用户名或 ID。 我当前的脚本始终返回该列为"display_name",即使我输入 ID 或电子邮件也是如此。 我做错了什么?
$criteria = "billgates@microsoft.com";
if(!preg_match("^([0-9]+)^", $criteria)){
if(!preg_match("^([a-zA-Z0-9 ]+)^", $criteria)){
if(!preg_match("^(['w-]+(?:'.['w-]+)*)@((?:['w-]+'.)*'w['w-]{0,66})'.([a-z]{2,6}(?:'.[a-z]{2})?)^", $criteria)){
$this->error = "Your search criteria of '".$criteria."'' is not a valid display name, email address, or ID.";
} else {
$column = "email_address";
}
} else {
$column = "display_name";
}
} else {
$column = "user_id";
}
echo $column;
以上将产生"display_name"。
嗨,
您可以简单地尝试此解决方案。 它对我有用。
<?php
$criteria = "billgates@microsoft.com";
if(!is_numeric($criteria)){
if(filter_var($criteria, FILTER_VALIDATE_EMAIL)){
$column = "email_address";
} else {
$column = "display_name";
}
} else {
$column = "user_id";
}
echo $column;
?>
您的正则表达式使用"^"作为分隔符。事实上的标准分隔符是"/"。"^"匹配字符串的开头。如果要匹配末尾,则需要使用"$"。当然,在分隔符内部。
$criteria = "billgates@microsoft.com";
if(!filter_var($criteria, FILTER_VALIDATE_EMAIL) === false)
$column = "email_address";
else if(is_numeric($criteria))
$column = "display_name";
else
$column = "user_id";
echo $column;
您的preg_match
正则表达式中几乎没有错误。 检查下面的代码。
$criteria = "2312";
if (!preg_match("/^[1-9][0-9]*$/", $criteria)) {
if (!preg_match("/^([a-zA-Z0-9 ]+)$/", $criteria)) {
if (!preg_match("/^[_a-z0-9-]+('.[_a-z0-9-]+)*@[a-z0-9-]+('.[a-z0-9-]+)*('.[a-z]{2,})$/", $criteria)) {
$this->error = "Your search criteria of '" . $criteria . "'' is not a valid display name, email address, or ID.";
} else {
$column = "email_address";
}
} else {
$column = "display_name";
}
} else {
$column = "user_id";
}
echo $column;
检查工作 http://phpfiddle.org/main/code/2z65-4rdv
所以我得出的结论使用了每个人的回答。 我没有使用正则表达式,而是使用 PHP 函数 is_numeric、ctype_alnum 和过滤器来验证电子邮件,同时保持与旧代码相同的结构。 我不想通过说如果字符串不是 ID 或电子邮件,那么它是一个显示名称来消除对显示名称的验证。 这是因为显示名称遵循某种格式,可以使用该方法输入任何旧字符串。 这是我想出的...
if(!is_numeric($criteria)){
if(!ctype_alnum($criteria)){
if(!filter_var($criteria, FILTER_VALIDATE_EMAIL)){
$this->error = "Your search criteria of '".$criteria."'' is not a valid display name, email address, or ID.";
} else {
$column = "email_address";
}
} else {
$column = "display_name";
}
} else {
$column = "user_id";
}