我需要使用Oracle正则表达式(REGEXP_LIKE)验证所提供的字符串是否只包含允许的字符。允许的字符数为: abcdefghijklmnopqrstuvwxyz0123456789_-。尝试执行
SELECT CASE
WHEN REGEXP_LIKE('abcdefghijklmnopqrstuvwxyz0123456789_-.'
, '^[a-z0-9_\-\.]+$')
THEN 'true'
ELSE 'false'
END tmp
FROM dual;
结果为'false‘。
对此有什么想法吗?
发布于 2012-06-27 08:36:05
这样如何:
SELECT CASE
WHEN REGEXP_LIKE ('abcdefghijklmnopqrstuvwxyz0123456789_-.',
'^([a-z]|[0-9]|_|\-|\.)+$')
THEN
'true'
ELSE
'false'
END AS tmp
FROM DUAL;
这能解决你的问题吗?(恐怕我不是站在PC前测试这个)
编辑:
FWIW下面将删除所有有效字符,如果您需要查看导致字符串验证失败的原因,则只留下无效字符:
SELECT REGEXP_REPLACE ('abcdefghijklmnopqrstuvwxyz0123456789_-.',
'([a-z]|[0-9]|_|\-|\.)+',
'') AS tmp
FROM DUAL;
您可以测试返回为NULL
的情况,这将是有效的,如果不是null,您可以在验证错误消息中返回无效字符。
希望这能帮上忙。
发布于 2012-06-27 08:19:54
破折号"-“必须是右方括号[]之间的第一个元素,反斜杠在[]之间没有特殊意义
发布于 2012-07-02 07:56:19
SELECT CASE
WHEN COUNT(REPLACE((TRANSLATE('abcdefghijklmnopqrstuvwxyz0123456789_-.',
'abcdefghijklmnopqrstuvwxyz0123456789_-.',
' ')),
' ',
'')) = 0 THEN
'TRUE'
ELSE
'FALSE'
END AS CHECK_RESULT
FROM DUAL
如果预定义列表中不存在任何字符,此查询将返回false。
希望能有所帮助。
https://stackoverflow.com/questions/11222010
复制相似问题