You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:02:02