2011-12-16 25 views
0

我使用Oracle 11g作为数据库,并使用PL/SQL作为SQL语言来验证表内的某些列。如何在PL/SQL中使用RegExp验证城市名称

要求(S):

  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; 
    

这工作时,我传递一个城市名称,如“图森”,而不是当有一个空间,例如旧金山或洛杉矶。

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

感谢您抽出宝贵的时间阅读这...

回答

1

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

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

甲骨文正则表达式不支持\s,看到here[:alpha:][:space:]是POSIX字符类,总是需要在字符类中。 [-[:space:]]的意思是“破折号或空格字符”。您可能希望用一个空格字符替换[:space:]

[编辑,以简化:special这里真的只可以是破折号或空格]

+0

[:空间:]是POSIX字符类。它包括空格,换行符,垂直制表符,水平制表符。你的意思是接受那些作为城市名称的一部分?是的,我知道输入制表符可能很困难,但它会对某些查询造成严重破坏。 –

+0

我也在想这个,但是最初的例子有'\ s',它确实包含了某些方言中的所有这些:p – fge

+0

fge:非常感谢!是的,现在它适用于名称中包含“旧金山”和/或“洛杉矶”之间空间的城市,但是,我也需要它与其中有破折号的城市合作,如“KAILUA-KONA” 。尝试使用^ [A-Z] +([[ - ]] [A-Z] +)* $但它不起作用。感谢所有的帮助。 –

相关问题