php邮箱验证正则(php实现邮箱验证码)

hacker|
117

thinkphp验证器正则常用规则

ThinkPHP的自动验证常用的正则

一般我们见的比较多的是设置规则为require、email之类的,其实这些本身也是属于正则表达式验证方式,只是系统内置定义了一些常用的正则表达式而已。这些内置的正则表达式的定义可以参考model类的regex方法,内置支持的正则定义包括:

require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字、zip 邮编、integer 整数、double 浮点数、english 英文字母,但是并不局限于这些正则规则的,我们完全可以直接在验证规则里面使用正则表达式进行定义,这样我们可以凭借强大的正则表达式来进行表单字段验 证,例如:

附上一些表单验证中比较常用的正则表达式写法:

匹配特定字符串:

限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

正则表达式的限定符有:

ThinkPHP的自动验证机制是为了进行表单数据验证,验证可以支持function、 callback、confirm、equal、unique和regex,这里要讲的是使用正则表达式进行验证。

特殊字符

许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。下表列出了正则表达式中的特殊字符:

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

例如:

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:

所谓特殊字符,就是一些有特殊含义的字符,如上面说的 runoo*b 中的 ,简单的说就是表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个 : runo*ob 匹配 runo ob。

许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。下表列出了正则表达式中的特殊字符:

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

正则表达式的限定符有:

由于章节编号在大的输入文档中会很可能超过九,所以您需要一种方式来处理两位或三位章节编号。限定符给您这种能力。下面的正则表达式匹配编号为任何位数的章节标题:

请注意,限定符出现在范围表达式之后。因此,它应用于整个范围表达式,在本例中,只指定从 0 到 9 的数字(包括 0 和 9)。

这里不使用 + 限定符,因为在第二个位置或后面的位置不一定需要有一个数字。也不使用 ? 字符,因为使用 ? 会将章节编号限制到只有两位数。您需要至少匹配 Chapter 和空格字符后面的一个数字。

如果您知道章节编号被限制为只有 99 章,可以使用下面的表达式来至少指定一位但至多两位数字。

上面的表达式的缺点是,大于 99 的章节编号仍只匹配开头两位数字。另一个缺点是 Chapter 0 也将匹配。只匹配两位数字的更好的表达式如下:

* 、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

例如,您可能搜索 HTML 文档,以查找括在 H1 标记内的章节标题。该文本在您的文档中如下:

H1Chapter 1 - 介绍正则表达式/H1

贪婪: 下面的表达式匹配从开始小于符号 () 到关闭 H1 标记的大于符号 () 之间的所有内容。

非贪婪: 如果您只需要匹配开始和结束 H1 标签,下面的非贪婪表达式只匹配 H1。

如果只想匹配开始的 H1 标签,表达式则是:

通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从"贪心"表达式转换为"非贪心"表达式或者最小匹配。

定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。

正则表达式的定位符有:

对php中正则表达式验证邮箱代码的疑惑,求高人指点?

^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$

这个正则表达式的写法是正确的,但是邮箱地址最后小数点后面的字母只能是2或者3位,比如com或者cn,你的例子aaaaaa太多了,呵呵

[a-z]{2,3}$ 这个表示结尾只能是2或者3位字母,不是至少2位

z后面那个减号,那个表示中横杠,比如用户名字是aaa-aaa

如果用你举得例子

可以写成

^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{1,20}$

这样表示 结尾的字母可以是1到20位

如何验证邮箱?

途径一:注册时联系方式选择邮箱输入常用的邮箱地址后,点击“免费发送验证码”按钮,系统会发送一封验证码邮件到您邮箱上。验证邮件页面途径二:进入“我的课堂—我的信息—基本信息”,完成邮箱验证输入常用的邮箱地址后,点击“验证”按钮,系统会发送一封验证链接邮件到您邮箱上完善信息页面完善信息页面验证邮箱登录邮箱,找到“爱学网验证邮箱信息”,点击邮件中的验证链接。

php验证邮箱格式

PHP正则表达式验证邮箱示例如下:

?php

$email='1909970983@.qq.com';

$pattern="/([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?/i";

if(preg_match($pattern,$email)){

echo '邮箱验证通过!';

} else{

echo '邮箱格式错误!';

邮箱正则表达式+正则基本知识点

一般程序员的姿势

正则表达式正确的运用姿势

今天来搞几个邮箱正则表达式,匹配多级域名,包括中文域名

从上图可以得出,除去“.”号,域名既有英文(最多是6个字符),也有中文(最多是3个汉字)

而现在有很多影子邮箱/百变邮箱,是使用二级域名或者三级域名,所以,我们先列举如下几个邮箱,然后写一个正则表达式,去匹配、判断

不管是什么邮箱,确定会有的字符是“@”和至少一个“.”(这里特指最后一个),那么我们就以这两个确定的符号为分界点,将每个邮箱拆分成3段,对每一段进行正则匹配,最终组成整个邮箱的正则匹配。当然进入下一步之前,先理一理基本知识点。

定义:一个正则可以匹配的字符串的长度不是固定的,使用量词可以达到这种目的。

量词:比如{m , n} :表示连续出现最少 m 次,最多 n 次;跟在一个字符的后面就表示对该字符的限定。

比如邮箱的校验:/^\w+@[a-z0-9]+.[a-z]{2,4}$/,写在了[a-z]后面,表示可以有2到4位的字母

又比如手机号的校验: /^1[3456789]\d{9}$/,跟在了\d后面,表示需要出现9个数字

对于量词的总结:

定义:正则匹配的字符串对于某一位置上的字符来说,它可以有多种可能,不局限于某一类型,使用字符组可以达到这种目的。

字符组:比如[abc],表示该字符是可以字符 "a"、"b"、"c" 中的任何一个。对于这一位置来说,我们可以有3种可能性。

比如手机号的校验: /^1[3456789]\d{9}$/,它在第二个位置,根据一般手机运营商来说,提供手机第二位的数字可以是3到9的任意一个,才符合规范。

如果字符组里表示的字符特别多,可以使用范围表示法,用连字符-来省略和缩写。

比如邮箱的校验:/^\w+@[a-z0-9]+.[a-z]{2,4}$/,它跟在@后面,根据我们邮箱的规范可知,@后面的 [a-z0-9]+ 表示:数字0到9和字母a-z中的至少一个字符

这里简单解析一下:

对于js正则: ([a-z]{2,6}|[\u2E80-\u9FFF]{2,3})

js正则的中文汉字正则表达式来源于手册:

对于php正则: ([a-z]{2,6}|[\x7f-\xff]{6,9})

在utf-8编码中,用ASCII码表中的第128~255编码中的3个编码表示一个汉字,这里用十六进制表示

验证一下:

运行结果:

运行结果

全部通过

当然,php正则匹配邮箱,还可以这样子

原理与 /^\w+@([\da-z\.-]+)\.([a-z]{2,6}|[\x7f-\xff]{6,9})/ 类似。

最后,上面的几个正则表达式是居于当前市面上现存的域名进行匹配的,下面提供几个更加宽松的邮箱正则匹配

原理都相似,可以对照理解下。如有误,欢迎留言区批评指正。

2条大神的评论

  • avatar
    访客 2023-04-08 下午 03:34:41

    转义序列: 所谓特殊字符,就是一些有特殊含义的字符,如上面说的 runoo*b 中的 ,简单的说就是表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个 : runo*ob 匹配 runo ob。 许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊

  • avatar
    访客 2023-04-08 上午 10:19:23

    页面途径二:进入“我的课堂—我的信息—基本信息”,完成邮箱验证输入常用的邮箱地址后,点击“验证”按钮,系统会发送一封验证链接邮件到您邮箱上完善信息页面完善信息页面验证邮箱登录邮箱,找到“爱学网验

发表评论