繁体   English   中英

正则表达式

[英]Regular Expression

我有两种方法来检查11g字符串中的特殊字符

1) 使用SELECT

V_CNT_QRY := ' SELECT LENGTH(TRIM(TRANSLATE(:1,
                                             ''
                                             abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 '',
                                             '' '')))
                  from dual ';
EXECUTE IMMEDIATE  V_CNT_QRY INTO V_CNT USING V_COLUMN_DATA;

2) 使用程序

CREATE OR REPLACE PROCEDURE Validate_Inputstring(input_String IN VARCHAR2) AS
BEGIN
  IF REGEXP_LIKE(input_String, '^[A-Z0-9a-z]*$') THEN
    DBMS_OUTPUT.PUT_LINE('U have entered alphanumeric chars--->' ||
                         input_String);
  ELSE
    DBMS_OUTPUT.PUT_LINE('U NOT have entered alphanumeric chars---->' ||
                         input_String);
  END IF;
END;

请提出一个更好的方法

假设您要检查字符串是否仅包含ASCII字符,则可以使用以下命令:

Select 'No'
  From dual
 Where LENGTH(ASCIISTR(:input_String)) != LENGTH(:input_String)
 Union
Select 'Yes'
  From dual
 Where LENGTH(ASCIISTR(:input_String)) = LENGTH(:input_String)

HTH

我将通过以下方式使用regexp_replace函数:

select 'You have'|| decode(regexp_replace (:txt,'^[A-Z0-9a-z]*$', '1'), '1', ' ', ' not ')  || 'entered a string composed only by alphanum characters' from dual;

绑定变量txt包含要验证的字符串。

create table testx
( val1 varchar2(50));

insert into testx (val1) values ('Some ' || chr(9) || 'bad string');
insert into testx (val1) values ('Some nice string with 123 numbers');
commit;

select val1, regexp_instr(val1, '[^[:alnum:] ]') from testx;

如果字符串仅包含字母数字或空格,则选择将返回0,否则> 0。

因此,您可以添加where子句以仅捕获“不良”字符串:

select val1 from testx where regexp_instr(val1, '[^[:alnum:] ]') > 0;

当然,您可以根据自己对“特殊字符”的定义进行修改。

编辑:如果您不关心标记标点,请尝试:

select val1 from testx where regexp_instr(val1, '[^[:alnum:] [:punct:]]') > 0;

再次,根据需要修改您的定义

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM