[英]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.