我正在使用正则表达式来确定用户输入的值是否为字母数字,允许一些特殊字符。
我正在使用以下代码,该代码工作正常:
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;
以上程序运作正常 现在我的问题是这些特殊符号是动态的,这些值因应用而异。
换句话说,它们存储在数据库中,并且对于每个应用程序都是不同的。
例如,对于应用A,这些可能是, + - ? @
,对于B,这些可能是{ ^ & '
。
是否可以编写正则表达式,以便一次检查字母数字字符和这些动态特殊符号?
我尝试了类似
的内容CREATE OR REPLACE PROCEDURE Validate_Inputstring (input_String IN VARCHAR2) AS
special_symbols VARCHAR2(300);
BEGIN
special_symbols :=',+-?';
IF REGEXP_LIKE(input_String,'^[A-Z0-9a-zspecial_symbols]*$') 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 :(得分:1)
bobince是在正确的轨道但是语法不太正确 - Oracle中的连接运算符是||,并且在replace()调用中有一个缺少的表达式......
REGEXP_LIKE(input_String,'^[A-Z0-9a-zspecial_symbols]*$')
你必须打破字符串以插入符号:
REGEXP_LIKE(input_String,'^[A-Z0-9a-z' || special_symbols || ']*$')
然而,有一个问题是你的特殊符号对正则表达式也可能是特殊的。 [] -character-class中的' - '表示执行范围而不是字面匹配' - '; a']'过早地结束了角色类。你必须使用字符串替换来反斜杠转义这些字符以及反斜杠本身。
special_symbols:= ',+-?';
special_group:= replace(replace(replace(special_symbols, '\', '\\'), '-', '\-'), ']', '\]');
IF REGEXP_LIKE(input_String,'^[A-Z0-9a-z' || special_group || ']*$') ...
答案 1 :(得分:0)
REGEXP_LIKE(input_String, '^ [A-Z0-9a-zspecial_symbols] * $')
你必须打破字符串以插入符号:
REGEXP_LIKE(input_String,'^[A-Z0-9a-z'+special_symbols+']*$')
然而,有一个问题是你的特殊符号对正则表达式也可能是特殊的。 [] -character-class中的' - '表示执行范围而不是字面匹配' - '; a']'过早地结束了角色类。你必须使用字符串替换来反斜杠转义这些字符以及反斜杠本身。
special_symbols:= ',+-?';
special_group:= replace(replace(replace('\', '\\'), '-', '\-'), ']', '\]');
IF REGEXP_LIKE(input_String,'^[A-Z0-9a-z'+special_group+']*$') ...
答案 2 :(得分:0)
感谢您的回复
我的代码如下 功能Validate_Inputstring_Func(input_String IN VARCHAR2)RETURN BOOLEAN是
special_symbols VARCHAR2(300); BEGIN
special_symbols:='+?@'; DBMS_OUTPUT.PUT_LINE('Enetered value为NULL'); 其他 DBMS_OUTPUT.PUT_LINE('Enetered value is Not NULL'|| input_String);
IF REGEXP_LIKE(input_String,'^ [A-Z0-9a-z'+ special_symbols +'] * $')那么 DBMS_OUTPUT.PUT_LINE('你输入了字母数字字符--->'|| input_String); 返回false;
ELSE DBMS_OUTPUT.PUT_LINE('你没有输入字母数字字符---->'|| input_String); 返回true; 万一; 结束如果;
END;