php正则表达式匹配指定长度的数字,前后无连续多余数字,匹配手机号微信QQ
在 PHP 中,使用正则表达式提取一串符合条件的数字(连续的6到11位数字),可以按照以下步骤构建正则表达式。
目标是:
- 匹配连续的6到11位数字。
- 目标数字前后不能有其他数字。
可以使用以下正则表达式:
(?<!\d)\d{6,11}(?!\d)解释:
(?<!\d):负向前瞻,确保目标数字前面没有其他数字(即,前面不是一个数字)。\d{6,11}:匹配连续6到11位数字。(?!\d):负向后瞻,确保目标数字后面没有其他数字(即,后面不是一个数字)。
示例 PHP 代码
<?php
$input = "654654658"; // 目标输入
// 正则表达式
$pattern = '/(?<!\d)\d{6,11}(?!\d)/';
// 查找匹配项
if (preg_match($pattern, $input, $matches)) {
echo "匹配到的数字是: " . $matches[0];
} else {
echo "没有匹配到符合条件的数字";
}
?>说明:
preg_match函数用于匹配目标字符串中的数字。- 如果匹配成功,会输出符合条件的数字,否则会输出“没有匹配到符合条件的数字”。
示例:
- 输入
654654658会输出654654658。 - 输入
6546596154984654656746会输出 "没有匹配到符合条件的数字",因为这个字符串中的数字连续过长,超过了 11 位。
实际应用:匹配出字符串中的电话和微信、QQ
/**
* 匹配出字符串中的电话和微信
* @param $content
* @return string[] [电话,微信,QQ号]
*/
public static function matchPhoneWeixin($content)
{
// 国内手机号(13568568454)
$regPhone = '#(?<!\d)(1[3-9][\d]{9})(?!\d).*#'; //不能是电话后面还带数字的情况
// 国际手机号(+8613568568454 +0086 13568568454)
$regPhone2 = '#(\+\d{2,5}\s?[\d]{8,11})(?!\d).*#';
// 微信号(必须以字母或者下划线开头,字母不区分大小写;可使用6-20个字母、数字、下划线和减号或它们的组合; 不支持设置中文)
$regWeixin = '#([a-zA-Z_][a-zA-Z0-9_\-]{5,20})#';
// QQ号(要求6-11位)
$regQQ = '#(?<!\d)([1-9]\d{5,10})(?!\d).*#';
$phone = '';
$weixin = '';
$qq = '';
$content = preg_replace('/[\s]+/', '', $content); //去除空格
if (preg_match($regPhone, $content, $match)) $phone = $match[1];
if (preg_match($regPhone2, $content, $match)) $phone = $match[1];
if (preg_match($regWeixin, $content, $match)) $weixin = $match[1];
if (!$phone && !$weixin && preg_match($regQQ, $content, $match)) {
if (
mb_strpos($content, '微信') !== false ||
mb_strpos($content, '+v') !== false ||
mb_strpos($content, '+V') !== false ||
mb_strpos($content, '加v') !== false ||
mb_strpos($content, '加V') !== false ||
mb_strpos($content, 'WX') !== false ||
mb_strpos($content, 'vx') !== false ||
mb_strpos($content, 'v') !== false ||
mb_strpos($content, 'V') !== false
) {
//这串数字识别为微信
$weixin = $match[1];
} else {
//20241231,不用匹配为QQ号,容易误抓
//20250303张老师:启用QQ号匹配,优化一下最大长度11位,提升正确率
$qq = $match[1];
}
}
return [$phone, $weixin, $qq];
}版权属于:Joyber
本文链接:https://blog.qqvbc.com/default/1271.html
转载时须注明出处及本声明