Oracle SQL Reg Exp检查电子邮件

时间:2015-11-17 13:18:55

标签: sql regex oracle

我想检查一个电子邮件地址是否适合某种模式:

- 只有字母,数字和'。'或者' _'符号。

- 最后一部分(例如:.com)必须包含2到4个字母。

这是我的Reg Exp:'[a-zA-Z0-9._]+@[a-zA-Z0-9._]+.[a-zA-Z]{2,4}'

问题是它接受像%这样的符号,并且.commmm被接受为最后一部分。我怎么能解决它?

2 个答案:

答案 0 :(得分:1)

主要问题实际上是两个:

  • 您在字符类之外使用未转义的.,可以匹配任何符号(但是换行符)
  • 您没有使用锚点^$,因此您可以匹配较大字符串中的子字符串。

使用

'^[a-zA-Z0-9._]+@[a-zA-Z0-9._]+[.][a-zA-Z]{2,4}$'
 ^                             ^^^             ^

当您将.放入一对方括号时,您会匹配一个文字句点。

答案 1 :(得分:0)

我认为您只需要^$来指定字符串的开头和结尾:

 '^[a-zA-Z0-9.]+@[a-zA-Z0-9.]+.[a-zA-Z]{2,4}$'

您可能需要稍微调整规则,以便电子邮件和域无法以句点开头:

 '^\w[a-zA-Z0-9.]*@\w[a-zA-Z0-9.]*.[a-zA-Z]{2,4}$'