正则表达式不适用于DB2数据库中的电子邮件地址验证

83qze16e  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(140)

我使用下面的查询从DB2数据库中选择有效的电子邮件地址。

Select CM_ID, CM_EMAIL from table_info where REGEXP_LIKE (CM_EMAIL,'^[A-Za-z]+[A-Za-z0-9.]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$')
vktxenjb

vktxenjb1#

真实的正确的正则表达式要复杂得多。
我不知道How can I validate an email address using a regular expression?链接上的答案是否正确,但它得到了太多的选票,而且似乎Db2至少支持这个相当复杂的表达式。如果它真的适合你,你可以在下面的表格中检查它并通知我们。

SELECT 
  CM_EMAIL
, REGEXP_LIKE (CM_EMAIL, '(?:[a-z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])')
  AS IS_VALID
FROM 
(
  VALUES
  'abc123@mail.com'
, 'abc@mail'  
, 'abc.def@mail#.com'
, 'abc-@mail.com'
) table_info (CM_EMAIL)

| CM_电子邮件|是否有效|
| - -|- -|
| abc123@mail.com |真的|
| abc@邮件|假的|
| 电子邮件地址:|假的|
| abc-@mail.com | 真的|

相关问题