使用 Preg_match 来确定手机号码或电子邮件
Use of Preg_match to Determine Mobile Number or Email
我想问一下是否有更好的方法来确定输入的字符串是 phone 号码还是电子邮件,这是我已经可以使用的代码
public function InviteFriend($invitation)
{
// Initialize Connection
$conn = $this->conn;
// Check what type of Invitation it is
if (preg_match_all('~\b\d[- /\d]*\d\b~', $invitation, $res) > 0) {
$type = 'phone';
} else if (preg_match_all('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i', $invitation, $res) > 0) {
$type = 'email';
}
echo $type;
}
但我担心的是,如果用户在同一个字符串中同时键入 phone 和电子邮件,那么 if 语句中的哪一个会被选中,哪个会被忽略?是我确定哪种类型的字符串合适还是有更有效的方法?
谢谢
几乎所有正则表达式风格中都有两个锚点,您在第二个正则表达式中使用它们来验证电子邮件地址,显示为 ^
和 $
,表示输入的开始和结束分别为字符串。
您也应该将它们用于首次验证。您的 phone 数字验证缺乏良好的验证,因为它验证了任意字符串序列,例如 1------- --------5
看起来不像 phone 数字以及更多其他东西,因为它不匹配整个字符串(缺少两个提到的锚点)。所以我用 \d{10}
表示一个 10 位 phone 数字,您可能希望更改它以满足您自己的要求,这次更准确。
您也不是真的想要那种电子邮件验证。 Something more simpler is better:
public function InviteFriend($invitation)
{
if (preg_match('~^\d{10}$~', $invitation)) {
$type = 'phone';
} else if (preg_match('~^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$~i', $invitation)) {
$type = 'email';
}
echo $type ?? 'Error';
}
我想问一下是否有更好的方法来确定输入的字符串是 phone 号码还是电子邮件,这是我已经可以使用的代码
public function InviteFriend($invitation)
{
// Initialize Connection
$conn = $this->conn;
// Check what type of Invitation it is
if (preg_match_all('~\b\d[- /\d]*\d\b~', $invitation, $res) > 0) {
$type = 'phone';
} else if (preg_match_all('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i', $invitation, $res) > 0) {
$type = 'email';
}
echo $type;
}
但我担心的是,如果用户在同一个字符串中同时键入 phone 和电子邮件,那么 if 语句中的哪一个会被选中,哪个会被忽略?是我确定哪种类型的字符串合适还是有更有效的方法? 谢谢
几乎所有正则表达式风格中都有两个锚点,您在第二个正则表达式中使用它们来验证电子邮件地址,显示为 ^
和 $
,表示输入的开始和结束分别为字符串。
您也应该将它们用于首次验证。您的 phone 数字验证缺乏良好的验证,因为它验证了任意字符串序列,例如 1------- --------5
看起来不像 phone 数字以及更多其他东西,因为它不匹配整个字符串(缺少两个提到的锚点)。所以我用 \d{10}
表示一个 10 位 phone 数字,您可能希望更改它以满足您自己的要求,这次更准确。
您也不是真的想要那种电子邮件验证。 Something more simpler is better:
public function InviteFriend($invitation)
{
if (preg_match('~^\d{10}$~', $invitation)) {
$type = 'phone';
} else if (preg_match('~^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$~i', $invitation)) {
$type = 'email';
}
echo $type ?? 'Error';
}