为了实现密码复杂性,我需要一个可以删除重复字符的函数(为了生成满足密码复杂性要求的密码)。所以像 weeeeee1 这样的字符串将不被允许,因为 e 是重复的。我需要一个函数来代替返回 we1,其中重复字符已被删除。必须使用 Oracle PL/SQL 或直接 sql。
我找到了 Oracle SQL -- remove partial duplicate from string ,但这不适用于我的 weeeeee1 测试用例,因为它只替换了一次迭代,因此返回weeee1。
我不是要测试没有重复的字符。我正在尝试将重复字符串更改为非重复字符串。
请您参考如下方法:
我认为您可以使用 regexp_replace 实现您的目标。或者我错过了什么?
select regexp_replace(:password, '(.)\1+','\1')
from dual;
下面是一个例子:
with t as (select 'weeee1' password from dual
union select 'wwwwweeeee11111' from dual
union select 'we1' from dual)
select regexp_replace(t.password, '(.)\1+','\1')
from t;
生产:
REGEXP_REPLACE(T.PASSWORD,'(.)\1+','\1')
we1
we1
we1