如何在PL / SQL中使用RegExp验证城市名称

时间:2011-12-16 20:34:41

标签: regex oracle plsql oracle11g

使用Oracle 11g作为我的数据库,使用PL / SQL作为SQL语言来验证表中的某些列。

要求:

  1. 验证“城市名称”,使其仅包含字母字符而不包含数字。

  2. 可以包含圣何塞或旧金山等城市的空间。

    function ValidateCity(city in varchar2) return varchar2 is
        valid varchar2(50) := 'valid';
    begin
        if not REGEXP_LIKE (city, '^[A-Z\s]*$') then
           valid := (case when valid = 'valid' then '' else valid end) 
                     || 'Does not match pattern ^[A-Z\s]*$ ';
        else
           valid := 'Required ';
        end if;
       return valid;
    end;
    
  3. 当我传入像“图森”这样的单个城市名称时,这种方法有效,但是当有空格时,例如旧金山或洛杉矶。

    欢迎任何提示/建议/建议!

    感谢您抽出宝贵时间阅读此内容......

2 个答案:

答案 0 :(得分:1)

normal* (special normal*)*再次......

^[[:alpha:]]+([-[:space:]][[:alpha:]]+)*$

Oracle正则表达式不支持\s,请参阅here[:alpha:][:space:]是POSIX字符类,并且始终需要在字符类中。 [-[:space:]]表示“破折号或空格字符”。您可能希望将[:space:]替换为单个空格字符。

[编辑简化:special这里实际上只是破折号或空格]

答案 1 :(得分:0)

为了记录,Oracle确实支持Perl样式的正则表达式:Perl-Influenced Extensions