如何使用正则表达式验证邮政编码?

5
如何使用正则表达式验证邮政编码?
它应该符合以下模式:
[A-z][0-9][A-Z] [0-9][A-Z][0-9]

例如。
B5D 2M4 
b5d 2m4 

我正在使用Oracle9i。
提前致谢, Shubhojwal Ghosh

该模式看起来像是[A-Z][0-9][A-Z] [0-9][A-Z][0-9] [a-z][0-9][a-z] [0-9][a-z][0-9]。 - pavium
[A-Z] 只匹配大写字母,[a-z] 只匹配小写字母。尝试使用 [a-zA-Z] 来匹配两者。 - arnep
还假设每个使用你的应用程序的人都符合邮政编码的这种格式 - 没有外国地址的可能性吗? - Leniency
1个回答

4
很抱歉,由于您正在使用非常旧的Oracle版本,因此无法使用标准的正则表达式函数,如REGEXP_LIKE。如果您升级到较新的Oracle版本,那将是一种解决方法。
在旧版Oracle中,您必须使用OWA_PATTERN包。请注意,由于OWA_PATTERN.MATCH函数返回一个BOOLEAN,因此您不能从SQL中调用它,只能从PL / SQL中调用。当然,您可以创建自己的包装函数,以返回整数或字符串,以指示邮政编码是否有效。
SQL> ed
Wrote file afiedt.buf

  1  declare
  2    function is_valid_zip( p_zip_code in varchar2 )
  3      return boolean
  4    is
  5    begin
  6      return owa_pattern.match( p_zip_code,
  7                                '[A-Z]{1}\d{1}[A-Z]{1}\d{1}[A-Z]{1}\d{1}',
  8                                'i' );
  9    end is_valid_zip;
 10  begin
 11    if( is_valid_zip( 'A1B2C3' ) )
 12    then
 13      p.l( '1) Match' );
 14    else
 15      p.l( '1) No match' );
 16    end if;
 17    if( is_valid_zip( '12345' ) )
 18    then
 19      p.l( '2) Match' );
 20    else
 21      p.l( '2) No match' );
 22    end if;
 23* end;
SQL> /
1) Match
2) No match

PL/SQL procedure successfully completed.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接