使用 preg_match() 函数配合以 ^ 开头和 $ 结尾的正则表达式,可以精确校验手机号和邮箱格式。加上 ^ 和 $ 锚点是为了确保整个字符串完全匹配模式,防止只匹配到字符串中间的部分内容导致误判。

如何编写手机号正则并验证?
手机号正则通常匹配以 1 开头、第二位为 3-9、后续跟 9 位数字的 11 位字符序列。通过 preg_match('/^1[3-9]\d{9}$/', $phone) 即可实现严格校验。

<?php $phone = "13800138000";
if (preg_match('/^1[3-9]\d{9}$/', $phone)) {
echo "Valid phone number";
} else {
echo "Invalid phone number";
}
?>
上述代码中,^1 表示字符串必须以 1 开头,[3-9] 限制第二位数字范围,\d{9} 匹配随后的 9 个数字,$ 确保后面没有其他字符。如果输入是 13800138000,将输出 “Valid phone number”;如果输入是 1380013800(少一位),将输出 “Invalid phone number”。
如何编写邮箱正则并验证?
邮箱正则需匹配用户名部分(字母、数字、下划线、点、连字符)和域名部分(字母、数字、点)。使用 preg_match('/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $email) 进行校验。

<?php $email = "user@example.com";
if (preg_match('/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $email)) {
echo "Valid email";
} else {
echo "Invalid email";
}
?>
该模式中,[a-zA-Z0-9._%+-]+ 匹配用户名,@ 是固定分隔符,[a-zA-Z0-9.-]+ 匹配域名主体,\.[a-zA-Z]{2,} 匹配顶级域名。若输入 user@example.com,返回有效;若输入 user@.com,因缺少域名主体而无效。
如果不加 ^ 和 $ 会发生什么?
如果不加 ^ 和 $,正则只会检查字符串中是否存在符合模式的子串,而非整个字符串是否符合格式。例如,手机号正则 /1[3-9]\d{9}/ 在输入 abc13800138000xyz 时仍会匹配成功,因为其中包含合法的手机号子串,这会导致错误地认为整个输入是合法手机号。同样,邮箱正则不加锚点时,xxxuser@example.comyyy 也会被判定为有效邮箱,尽管它显然不是标准格式。因此,锚点是确保“全字符串匹配”的关键机制。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











