首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PL/SQL REGEXP_LIKE测试字符串中允许的字符

PL/SQL REGEXP_LIKE测试字符串中允许的字符
EN

Stack Overflow用户
提问于 2012-06-27 16:16:33
回答 4查看 6K关注 0票数 0

我需要使用Oracle正则表达式(REGEXP_LIKE)验证所提供的字符串是否只包含允许的字符。允许的字符数为: abcdefghijklmnopqrstuvwxyz0123456789_-。尝试执行

代码语言:javascript
代码运行次数:0
运行
复制
SELECT CASE 
         WHEN REGEXP_LIKE('abcdefghijklmnopqrstuvwxyz0123456789_-.'
                        , '^[a-z0-9_\-\.]+$') 
         THEN 'true' 
         ELSE 'false' 
END tmp 
FROM dual;

结果为'false‘。

对此有什么想法吗?

EN

回答 4

Stack Overflow用户

发布于 2012-06-27 16:36:05

这样如何:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT CASE
          WHEN REGEXP_LIKE ('abcdefghijklmnopqrstuvwxyz0123456789_-.',
                            '^([a-z]|[0-9]|_|\-|\.)+$')
          THEN
             'true'
          ELSE
             'false'
       END AS tmp
  FROM DUAL;

这能解决你的问题吗?(恐怕我不是站在PC前测试这个)

编辑:

FWIW下面将删除所有有效字符,如果您需要查看导致字符串验证失败的原因,则只留下无效字符:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT REGEXP_REPLACE ('abcdefghijklmnopqrstuvwxyz0123456789_-.',
                       '([a-z]|[0-9]|_|\-|\.)+',
                       '') AS tmp
  FROM DUAL;

您可以测试返回为NULL的情况,这将是有效的,如果不是null,您可以在验证错误消息中返回无效字符。

希望这能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2012-06-27 16:19:54

破折号"-“必须是右方括号[]之间的第一个元素,反斜杠在[]之间没有特殊意义

票数 0
EN

Stack Overflow用户

发布于 2012-07-02 15:56:19

代码语言:javascript
代码运行次数:0
运行
复制
SELECT CASE
         WHEN COUNT(REPLACE((TRANSLATE('abcdefghijklmnopqrstuvwxyz0123456789_-.',
                                       'abcdefghijklmnopqrstuvwxyz0123456789_-.',
                                       ' ')),
                            ' ',
                            '')) = 0 THEN
          'TRUE'
         ELSE
          'FALSE'
       END AS CHECK_RESULT
  FROM DUAL

如果预定义列表中不存在任何字符,此查询将返回false。

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11222010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档