如何创建一个 Oracle 正则表达式来检查给定的字符串是否包含数字和字母,并且不包含特殊字符。 例如,
如果字符串像'kjds327',它必须返回真
如果字符串是 'dkfsdsf' 或 '132564' 或 'asjv@3#34342fd' 它必须 返回假
如何创建一个 Oracle 正则表达式来检查给定的字符串是否包含数字和字母,并且不包含特殊字符。 例如,
如果字符串像'kjds327',它必须返回真
如果字符串是 'dkfsdsf' 或 '132564' 或 'asjv@3#34342fd' 它必须 返回假
您可以按如下方式使用 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]')
如果您希望结果为真和假,您可以在 CASE
子句中使用带有此 regexp
的 SELECT
语句。
对于每个必需的断言,您可以对 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