为了实现密码复杂性,我需要一个可以删除重复字符的函数(为了生成符合密码复杂性要求的密码)。因此,不再允许像weeeeee1这样的字符串,因为重复了e。我需要一个函数,它将返回we1,其中重复的字符已被删除。必须使用Oracle PL / SQL或直接SQL。
我找到了Oracle SQL -- remove partial duplicate from string,但这对我的weeeeee1测试用例不起作用,因为它只替换了一次迭代,因此返回weee1。
我不是要测试没有重复的字符。我正在尝试将重复的字符串更改为非重复的字符串。
答案 0 :(得分:6)
我认为您可以使用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
答案 1 :(得分:1)
试试这个:
select regexp_replace('weeeeee1', '(.)\1+', '\1') val from dual
VAL
---
we1
答案 2 :(得分:0)
也许,
使用返回值(weee1)再次检查并替换
取出单词的每个字母并检查是否有超过1个存在的整个单词。