你错过了周围的第一个字符类中的冒号,[[alnum]]
:
'^[[:alnum:]]([^[:alnum:]]|\"+|\.+)'
例如
select case when regexp_like('d[av inder 1234',
'^[[:alnum:]]([^[:alnum:]]|\"+|\.+)')
then 0 else 1 end as vintResult from dual;
VINTRESULT
----------
0
或者:
DECLARE
vintResult NUMBER DEFAULT NULL;
BEGIN
select case when regexp_like('d[av inder 1234' ,'^[[:alnum:]]([^[:alnum:]]|\"+|\.+)') then 0 else 1 end into vintResult from dual;
dbms_output.put_line('result: '||vintResult);
END;
/
PL/SQL procedure successfully completed.
result: 0
如果你允许在第一位置的任何字符,你可以只使用一个点:
'^.([^[:alnum:]]|\"+|\.+)'
...但我怀疑你只能做希望字母数字处于第一位。如果你有一个要排除的特定字符的清单,那么它可能会更清楚,尤其是对于将来有人维护这个字符的人来说,要列出这些字符而不是使用第二个字符类 - 就像在@KevinEsche的回答中一样。 (我不确定你的模式与你想禁止的模式完全相符)。
DECLARE
vintResult NUMBER DEFAULT NULL;
BEGIN
select case when regexp_like('d[av inder 1234' ,'^.[][[email protected]#$%^&*()_+=`~{}''\|?/><,;:].*')
then 0 else 1 end into vintResult from dual;
dbms_output.put_line('result: '||vintResult);
END;
/
PL/SQL procedure successfully completed.
result: 0
请注意将方括号放置在已从原始字符串移出的字符组中;这是为了防止他们被误解为早日结束团队。
editted的coluns中。 我确实有他们在我的代码,但忘了把它们写在这里。尽管如此, 仍然没有工作。 我如何使用一个字符列表来禁止?我应该使用什么样的模式? –
@DrorCohen - 您的代码按照预期的方式与列一起运行(无论如何,固定了变量名称声明)。所以不知道你在做什么不同。 –
我测试了你建议的模式“^ [[:alnum:]]([^ [:alnum:]] | \”+ | \。+)'“ 当把char从[改变为'我仍然得到结果:0,但它应该是1因为'是允许的 –