手机号合法性检查-MySQL自定义函数实现

该函数用于校验输入的手机号码是否合法,通过去除可能的“+86”或“86”前缀后,检查剩余字符串是否为11位数字,并以13到19开头。使用正则表达式进行匹配,返回1表示通过校验,0表示未通过。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


CREATE DEFINER=`root`@`%` FUNCTION `FUN_MOBILE_CHECK`( p_mobile VARCHAR(100)) RETURNS varchar(50) CHARSET utf8
    DETERMINISTIC
BEGIN

        -- 功能:校验手机号码是否合法
        -- 入参:手机号码(varchar)
        -- 返回值(varchar):1:通过,0:不通过
        
        -- 校验规则:
            -- 字符串仅包含[0-9+]    
            -- 头部去除"+86"和"86"以后长度满足11位        
            -- 头部去除"+86"和"86"以后字符串以"13","14","15","16","17","18","19"开头    
        
        DECLARE V_RETURN VARCHAR(50);
        DECLARE v_mobile VARCHAR(100);
        DECLARE v_mobile_2 VARCHAR(100);
        DECLARE v_reg_1 VARCHAR(10);  -- 正则校验结果
        DECLARE v_len int; 
        
        SET V_RETURN = '1';   -- 1:通过
        SET v_reg_1 = '1';   -- 1:通过
        
        -- 去掉头部 +86
        set v_mobile = replace(p_mobile, '+86', '');    
        
        -- 去掉头部 86
        set v_len = length(v_mobile);
        
        select (case when left(v_mobile, 2) = '86' then right(v_mobile, (v_len - 2) ) else v_mobile end)
        into v_mobile_2 
        from dual;
        
        -- 正则校验    头部去除"+86"和"86"以后,字符串为11位数字组成,以"13","14","15","16","17","18","19"开头
        
        select v_mobile_2 regexp '^1[3-9]{1}[0-9]{9}$'
        into V_RETURN
        from dual;
    
    RETURN V_RETURN;
        
END

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值