oracle正则表达式来检查字符串包含字母和数字并且不包含特殊字符

如何创建一个 Oracle 正则表达式来检查给定的字符串是否包含数字和字母,并且不包含特殊字符。 例如,

如果字符串像'kjds327',它必须返回真

如果字符串是 'dkfsdsf' 或 '132564' 或 'asjv@3#34342fd' 它必须 返回假

zyjzb258 回答:oracle正则表达式来检查字符串包含字母和数字并且不包含特殊字符

您可以按如下方式使用 REGEXP_LIKE

select * from your_table
 where regexp_like(your_column,'([a-zA-Z][0-9]+)|([0-9][a-zA-Z]+)')
   and not regexp_like(your_column,'[^a-zA-Z0-9]')

db<>fiddle

如果您希望结果为真和假,您可以在 CASE 子句中使用带有此 regexpSELECT 语句。

,

对于每个必需的断言,您可以对 REGEXP_LIKE 进行三次调用:

SELECT *
FROM yourTable
WHERE
    REGEXP_LIKE(col,'[A-Za-z]') AND       -- contains alphabet
    REGEXP_LIKE(col,'[0-9]')    AND       -- contains number
    NOT REGEXP_LIKE(col,'[^A-Za-z0-9]');  -- no special character

请注意,这里我假设“特殊”字符是任何非字母数字字符。

,

此任务只需要一个正则表达式。

稍加思考就会发现,一个字符串必须至少包含一个字母和至少一个数字,并且只包含字母和数字,必须包含一个字母后紧跟一个数字,或者一个数字后跟一个字母。我不会花太多时间在这上面,因为这是基本逻辑的问题(而不是 Oracle SQL 编程)。

有了这个见解,解决方案就变得清晰了。您需要这样的东西(使用 POSIX 括号表达式)。不要忘记锚点 ^$ 以确保匹配整个字符串,而不仅仅是其中的一部分。

with
  sample_inputs(string) as (
    select 'kjds327'        from dual union all
    select 'dkfsdsf'        from dual union all
    select '132564'         from dual union all
    select 'asjv@3#34342fd' from dual union all
    select null             from dual union all
    select '8B'             from dual
  )
select string,case when regexp_like(string,'^[[:alnum:]]*(([[:alpha:]][[:digit:]])|([[:digit:]][[:alpha:]]))[[:alnum:]]*$')
         then 'true' else 'false' end as test_result
from   sample_inputs
;

STRING         TEST_RESULT
-------------- -----------
kjds327        true 
dkfsdsf        false
132564         false
asjv@3#34342fd false
               false
8B             true 
本文链接:https://www.f2er.com/1171927.html

大家都在问