【问题标题】:Regexp_Like to Validate Uppercase Characters [A-Z] and Numbers [0-9] OnlyRegexp_Like 仅验证大写字符 [A-Z] 和数字 [0-9]
【发布时间】:2019-09-04 18:27:40
【问题描述】:

我想在 Oracle 的 SQL 中使用 regexp_like 进行查询,它只验证大写字符 [A-Z] 和数字 [0-9]

SELECT * 
  FROM dual 
 WHERE REGEXP_LIKE('AAAA1111', '[A-Z, 0-9]')

【问题讨论】:

    标签: sql regex oracle regexp-like


    【解决方案1】:
    1. 列表项

    select 语句 probalby 应该是这样的

    SELECT 'Yes' as MATCHING 
      FROM dual 
     WHERE REGEXP_LIKE ('AAAA1111', '^[A-Z0-9]+$')
    

    这意味着从第一个 ^ 到最后一个 $ 字母开始,每个字符都应该是大写字母或数字。重要提示:Z 和 0 之间没有逗号或空格。+ 代表至少一个或多个字符。

    编辑:根据巴巴罗斯的回答,另一种选择方式是可能的

    SELECT 'Yes' as MATCHING
      FROM DUAL 
     WHERE regexp_like('AAAA1111','^[[:digit:][:upper:]]+$')
    

    编辑:添加了DBFiddle

    可以在 here 和 oracle 正则表达式 here 找到快速帮助。

    【讨论】:

    • 不,它是正确的——你可以在dbfiddle 上试试——当然你需要选择一列而不是从双列中选择,否则就可以了。
    • 好吧,你是对的,你也考虑了没有空格的情况。
    【解决方案2】:

    你可以使用:

    select str as "Result String" 
      from tab
     where not regexp_like(str,'[[:lower:] ]') 
       and regexp_like(str,'[[:alnum:]]')
    

    其中not regexp_likePOSIX [^[:lower:]] 模式代表消除字符串 包含小写,

    and regexp_like with POSIX [[:alnum:]] 模式代表接受字符串 没有符号

    (只包含字母和数字甚至不包含空格因为[[:lower:] ]的末尾有空格)

    Demo

    【讨论】:

    • 也是使用 POSIX 的一个很好的解决方案。我建议该解决方案将 where 条件更改为 where regexp_like(str,'[[:alnum:][:upper:]]')。奇怪的是,您仍然需要 [^[:space:]] 以避免空格。
    • 谢谢@edi。我已经尝试过了,但给出了错误的结果(除了空间考虑)。
    • Here 我已经建立在您的解决方案之上,该解决方案没有空格,看起来像 where regexp_like(str,'^[[:alnum:][:upper:]]+$')
    • 不幸的是@edi,它仍然带来EdUARDOFERRREIRA,至少包含小写字母。
    • 是的,你是对的 :) - 快速发布...但是...这应该可以解决问题 where regexp_like(str,'^[[:digit:][:upper:]]+$') .... 和 fiddle
    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 2013-11-07
    • 2019-11-22
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多