求助:编写PL/SQL手机号验证函数遇语法错误,需满足指定规则
PL/SQL手机号验证函数修正方案
语法错误排查
原函数的核心语法问题是IF语句未闭合,缺少END IF;语句,导致PL/SQL编译器无法正确解析代码结构。
完整实现代码
结合你提出的三个验证规则,修正并完善后的函数如下:
CREATE OR REPLACE FUNCTION is_phone_number( p_str IN VARCHAR2 ) RETURN NUMBER IS BEGIN -- 同时满足三个验证条件:全数字、长度10位、第一位和第四位非0/1 IF REGEXP_LIKE(p_str, '^[2-9][[:digit:]]{2}[2-9][[:digit:]]{6}$') THEN RETURN 1; -- 验证通过返回1 ELSE RETURN 0; -- 验证不通过返回0 END IF; END; /
正则表达式说明
正则表达式^[2-9][[:digit:]]{2}[2-9][[:digit:]]{6}$拆解:
^[2-9]:第一位必须是2-9的数字(排除0和1)[[:digit:]]{2}:第二、三位为任意数字[2-9]:第四位必须是2-9的数字(排除0和1)[[:digit:]]{6}:第五到第十位为任意数字^和$:限定整个字符串的起止位置,避免匹配部分符合的子串
测试示例
-- 验证通过的手机号 SELECT is_phone_number('2345678901') FROM DUAL; -- 返回1 -- 第一位为0,验证不通过 SELECT is_phone_number('0345678901') FROM DUAL; -- 返回0 -- 第四位为1,验证不通过 SELECT is_phone_number('2315678901') FROM DUAL; -- 返回0 -- 长度不足10位,验证不通过 SELECT is_phone_number('234567890') FROM DUAL; -- 返回0 -- 包含非数字字符,验证不通过 SELECT is_phone_number('234a678901') FROM DUAL; -- 返回0
内容的提问来源于stack exchange,提问作者Pugzly
相关产品推荐
相关产品推荐

