我有两种方法可以检查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;
请建议更好的方法
答案 0 :(得分:2)
假设您要检查字符串是否仅包含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
答案 1 :(得分:2)
我会以下列方式使用 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 包含要验证的字符串。
答案 2 :(得分:1)
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;
如果字符串仅包含字母数字或空格,则select将返回0,否则> 0
所以,你可以添加一个where子句来抓取“坏”字符串:
select val1 from testx where regexp_instr(val1, '[^[:alnum:] ]') > 0;
当然,根据您对“特殊字符”的定义,您可以根据需要对其进行修改。
编辑: 如果您不关心标记标点符号,请尝试:
select val1 from testx where regexp_instr(val1, '[^[:alnum:] [:punct:]]') > 0;
再次根据您的定义修改