PL / SQL中的正则表达式

时间:2009-03-20 15:08:18

标签: regex plsql

我正在使用正则表达式来确定用户输入的值是否为字母数字,允许一些特殊字符。

我正在使用以下代码,该代码工作正常:

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;

但它不起作用。有人有解决方案吗?提前谢谢!

3 个答案:

答案 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;