文章目录

  • 准备工作
  • LIKE 运算符
    • 转义字符
    • 数据库扩展
  • MySQL 正则表达式
  • Oracle 正则表达式
  • SQL Server 正则表达式
  • PostgreSQL 正则表达式
  • SQLite 正则表达式
  • 参考文档

字符串的模式匹配(pattern matching)是指给定一个模式,然后判断某个字符串是否满足该模式。常见的应用包括敏感词的检测、身份证校验、IP 地址验证等。

本文以验证电子邮箱的合法性为例,介绍如何在 SQL 中实现字符串的模式匹配,涉及的数据库包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。下表列出了这些数据库对于模式匹配的支持情况:

模式匹配 MySQL Oracle SQL Server PostgreSQL SQLite
LIKE 运算符 ✔️ ✔️ ✔️ ✔️ ✔️
正则表达式 REGEXP_LIKE() REGEXP_LIKE() ~

接下来我们详细讨论不同数据库的具体实现细节。

准备工作

我们首先创建一个测试表,并且生成一些测试数据:

CREATE TABLE test (email VARCHAR(50)
);INSERT INTO test VALUES ('TEST@qq.com');
INSERT INTO test VALUES ('test@qq');
INSERT INTO test VALUES ('.123@qq.com');
INSERT INTO test VALUES ('test+email@sina.cn');
INSERT INTO test VALUES ('me.qq.com');
INSERT INTO test VALUES ('123.test@sql.org');

对于 Web 开发中常见的邮箱地址验证问题,我们首先需要定义一个合法电子邮箱的规则。电子邮箱一般格式为:用户名@域名;以下是一个简单的规则:

  • 以字母或者数字开头,后面跟一个或者多个字母、数组或特殊字符( . _ - );
  • 然后是一个 @ 字符;
  • 接着是一个或者多个字母、数组或特殊字符( . - );
  • 最后是域名,即 . 以及 2 到 4 个字母。

对于以上规则,使用正则表达式可以描述如下:

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

简单说明一下,^ 表示匹配字符串的开头;[a-zA-Z0-9] 匹配大小写字母或数字;+ 表示匹配前面的内容一次或多次;. 匹配任何一个字符,\. 匹配点号自身;{2,4} 匹配前面的内容 2 次到 4次;$ 表示字符串的结束。

【SQL 模式匹配】如何验证电子邮箱的合法性?相关推荐

  1. html 邮政编码格式,js与jquery正则验证电子邮箱、手机号、邮政编码的方法

    本文实例讲述了js与jquery正则验证电子邮箱.手机号.邮政编码的方法. jQuery代码: //验证邮政编码 $("#postcode").blur(function(){ / ...

  2. html验证邮箱和手机号,js与jquery正则验证电子邮箱、手机号、邮政编码的方法

    本文实例讲述了js与jquery正则验证电子邮箱.手机号.邮政编码的方法. jQuery代码: 获取邮政编码 var postcode=$("#postcode").val(); ...

  3. js验证电子邮箱,js验证email合法性,javascript验证电子信箱

    <script> function Juge(theForm) {   if (theForm.txtemail.value == "")   {     alert( ...

  4. java邮箱地址正则表达式_JAVA 电子邮箱格式验证,使用正则表达式

    正则表达式 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),能够用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. ...

  5. JAVA 电子邮箱格式验证,使用正则表达式

    正则表达式 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. ...

  6. leetcode182. 查找重复的电子邮箱(SQL)

    编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. 示例: +----+---------+ | Id | Email   | +----+---------+ | 1  | a@b ...

  7. 关于Microsoft电子邮箱验证代码

    刚入大学买的电脑,真的是一窍不通的小白,让我自己安装设置账户,不知道该咋整就一步一步按着来. 到了电子邮箱这一块直接寄了,因为他上面显示已经向我原先瞎创建的一个电子邮箱发送了代码,要输入那个安全代码激 ...

  8. 编写一个 SQL 查询,来删除 Person表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

    题目 编写一个 SQL 查询,来删除 Person表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小的那个. Id Email 1 john@example.com 2 bob@example.c ...

  9. 编写一个 SQL 查询,来删除 Person表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

    题目 编写一个 SQL 查询,来删除 Person表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个. +----+------------------+ | Id | Email | + ...

最新文章

  1. 多模态理论张德禄_观点 | 多模态研究:认知语言学的新方法
  2. java难点解析(七)-抽象类
  3. 在Python中定义和使用抽象类的方法
  4. 【Java】Java趣味分享:try finally
  5. docker 部署了一个网站玩
  6. Hive静态分区和动态分区
  7. 最近好颓废啊,改过自新就从收拾自己的东西开始吧
  8. 如何编译CWM Recovery
  9. CATIA_CAA_RADER26+VS2012安装教程
  10. php探针教程,php探针程序的推荐
  11. 见证“开放式多路供水”的技术难度应大于人类上天!
  12. xp系统安装金蝶k3服务器配置,XP单机版安装金蝶K3的13.1版本号,金蝶K3Wise安装步骤,安装成功...
  13. C语言实现洛谷题库中的 P1125 [NOIP2008 提高组] 笨小猴
  14. 目标优化之帕累托最优
  15. 动态内存管理(开辟以及释放动态内存空间)
  16. windows安装hadoop教程,带截图
  17. 解决调用wx.downLoadFile下载的文件名乱码(长串英文字符)问题
  18. dpdk pktgen发包工具使用
  19. Httpd:无法找到/etc/httpd/conf
  20. 中职c语言多选题及答案,国二c语言题库选择题答案

热门文章

  1. nashorn中对象返回ScriptObjectMirror 后,toString的问题
  2. js-03--for、while、continue、break、断点调试、数组、
  3. java基础-哈希映射和哈希集
  4. 数栈技术干货:从0到1实现谷歌插件开发探索及应用
  5. 你迷茫吗?是的我很迷茫。迷茫那是因为你读书太少!
  6. Windows 10 基于 IIS 搭建 GitLab
  7. 计算机思维在数学中的应用,浅谈数学思维方式在计算机教学中的应用
  8. tf.keras.activations.gelu tensorflow1.15.0
  9. MPI Collective Communications
  10. Mecanim的简单应用