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

Apex应用文本项(逗号分隔多邮箱)合法性验证实现咨询

解决Apex中逗号分隔邮箱地址的验证问题

首先得指出你原来代码里的几个关键问题:

  • 错误用了apex_item.text(1)获取页面项值:这个API是用来在报表里生成文本输入控件的,要拿当前页面的文本项值,得用:PXX_YOUR_ITEM_NAME(把XX换成你的页面编号,YOUR_ITEM_NAME换成你的文本项名称)。
  • 逻辑判断完全反了:if not l_requestors_name not like '%@%'是双重否定,而且这种方式只能检查有没有@,根本做不了合法邮箱格式的验证。
  • 没处理多邮箱场景:你的代码只检查了整个字符串,没有拆分每个邮箱单独验证。

下面给你两种实用的实现方式,按需选就行:

方式一:PL/SQL函数验证(推荐,灵活可控)

假设你的文本项叫P1_EMAILS,页面编号是1,按以下步骤创建验证:

  1. 进入页面编辑界面,找到对应文本项,切换到「验证」标签,新建验证,类型选「PL/SQL函数返回错误文本」。
  2. 在PL/SQL代码区输入:
DECLARE
    l_email_list apex_t_varchar2;
    l_email      varchar2(255);
    l_error_msg  varchar2(4000);
    -- 标准邮箱格式正则表达式
    l_email_regex varchar2(200) := '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$';
BEGIN
    -- 拆分逗号分隔的邮箱列表,同时去除前后空格
    l_email_list := apex_string.split(trim(:P1_EMAILS), ',');
    
    -- 逐个验证每个邮箱
    FOR i IN 1..l_email_list.count LOOP
        l_email := trim(l_email_list(i));
        
        -- 跳过连续逗号产生的空项
        IF l_email IS NULL THEN
            CONTINUE;
        END IF;
        
        -- 用正则检查邮箱格式
        IF NOT REGEXP_LIKE(l_email, l_email_regex) THEN
            l_error_msg := l_error_msg || '第' || i || '个邮箱 "' || l_email || '" 格式不合法' || CHR(10);
        END IF;
    END LOOP;
    
    -- 有错误就返回提示,无错误返回NULL表示验证通过
    IF l_error_msg IS NOT NULL THEN
        RETURN l_error_msg;
    ELSE
        RETURN NULL;
    END IF;
END;
  1. 保存后测试:比如输入test@example.com, invalid-email, another@test.co,会明确提示第二个邮箱格式不对。

方式二:正则表达式验证(更简洁)

如果不想写PL/SQL,也可以直接用正则验证:

  1. 新建验证,类型选「正则表达式」,验证规则选「不匹配时显示错误」。
  2. 正则表达式输入框填:
^(\s*[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\s*)(,\s*[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\s*)*$
  1. 错误消息填:「请输入合法的逗号分隔邮箱地址」

这个正则会匹配单个合法邮箱,也支持多个用逗号分隔的邮箱,还允许邮箱前后带空格。

补充提示

  • 正则表达式可以根据你的需求调整,比如允许某些特殊字符,或者限制域名后缀长度。
  • 如果你的文本项允许空值,记得在验证里勾选「当项为空时跳过验证」,避免空值触发错误。

内容的提问来源于stack exchange,提问作者Abinnaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:04:27