前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP开发中常用的正则表达式

PHP开发中常用的正则表达式

作者头像
沈唁
发布2018-05-24 14:03:31
1.2K0
发布2018-05-24 14:03:31
举报
文章被收录于专栏:沈唁志沈唁志沈唁志

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。许多程序设计语言(javascrippt、php 等)都支持正则表达式,这些编程语言中都有相关的方法,使用正则对字符串进行操作。今天正好学了正则,顺便整理一下 ? 

一、校验数字的表达式

数字:^0-9*$

n 位的数字:^\d{n}$

至少 n 位的数字:^\d{n,}$

m-n 位的数字:^\d{m,n}$

零和非零开头的数字:^(0|1-9*)$

非零开头的最多带两位小数的数字:^(1-9*)+(.0-9{1,2})?$

带 1-2 位小数的正数或负数:^(-)?\d+(.\d{1,2})?$

正数、负数、和小数:^(-|+)?\d+(.\d+)?$

有两位小数的正实数:^0-9+(.0-9{2})?$

有 1~3 位小数的正实数:^0-9+(.0-9{1,3})?$

非零的正整数:^1-9\d*$ 或 ^(1-9*){1,3}$ 或 ^+?1-9*$

非零的负整数:^-1-90-9″*$ 或 ^-1-9\d*$

非负整数:^\d+$ 或 ^1-9\d*|0$

非正整数:^-1-9\d*|0$ 或 ^((-\d+)|(0+))$

非负浮点数:^\d+(.\d+)?$ 或 ^1-9\d*.\d*|0.\d*1-9\d*|0?.0+|0$

非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-(1-9\d*.\d*|0.\d*1-9\d*))|0?.0+|0$

正浮点数:^1-9\d*.\d*|0.\d*1-9\d*$ 或 ^((0-9+.0-9*1-9*)|(0-9*1-9*.0-9+)|(0-9*1-9*))$

负浮点数:^-(1-9\d*.\d*|0.\d*1-9\d*)$ 或 ^(-((0-9+.0-9*1-9*)|(0-9*1-9*.0-9+)|(0-9*1-9*)))$

浮点数:^(-?\d+)(.\d+)?$ 或 ^-?(1-9\d*.\d*|0.\d*1-9\d*|0?.0+|0)$

二、校验字符的表达式

汉字:^\u4e00-\u9fa5{0,}$

英文和数字:^A-Za-z0-9+$ 或 ^A-Za-z0-9{4,40}$

长度为 3-20 的所有字符:^.{3,20}$

由 26 个英文字母组成的字符串:^A-Za-z+$

由 26 个大写英文字母组成的字符串:^A-Z+$

由 26 个小写英文字母组成的字符串:^a-z+$

由数字和 26 个英文字母组成的字符串:^A-Za-z0-9+$

由数字、26 个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$

中文、英文、数字包括下划线:^\u4E00-\u9FA5A-Za-z0-9_+$

中文、英文、数字但不包括下划线等符号:^\u4E00-\u9FA5A-Za-z0-9+$ 或 ^\u4E00-\u9FA5A-Za-z0-9{2,20}$

可以输入含有^%&’,;=?$\”等字符:^%&’,;=?$\x22+

禁止输入含有~的字符:^~\x22+

三、特殊需求表达式

Email 地址:^\w+(-+.\w+)*@\w+(-.\w+)*.\w+(-.\w+)*$

域名:a-zA-Z0-9{0,62}(/.a-zA-Z0-9{0,62})+/.?

InternetURL:a-zA-z+://^\s* 或 ^http://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?$

手机号码:^(130-9|145|7|150|1|2|3|5|6|7|8|9|180|1|2|3|5|6|7|8|9)\d{8}$

电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX):^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$

国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

身份证号(15 位、18 位数字):^\d{15}|\d{18}$

短身份证号码(数字、字母 x 结尾):^(0-9){7,18}(x|X)?$ 或 ^\d{8,18}|0-9x{8,18}|0-9X{8,18}?$

帐号是否合法(字母开头,允许 5-16 字节,允许字母数字下划线):^a-zA-Z{4,15}$

密码(以字母开头,长度在 6~18 之间,只能包含字母、数字和下划线):^a-zA-Z\w{5,17}$

强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):^(?=.*\d)(?=.*a-z)(?=.*A-Z).{8,10}$

日期格式:^\d{4}-\d{1,2}-\d{1,2}

一年的 12 个月(01~09 和 1~12):^(0?1-9|10-2)$

一个月的 31 天(01~09 和 1~31):^((0?1-9)|((1|2)0-9)|30|31)$

钱的输入格式:

  • 有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00″, 和没有 “分” 的 “10000″ 和 “10,000″:^1-9*$
  • 这表示任意一个不以 0 开头的数字,但是,这也意味着一个字符”0″不通过,所以我们采用下面的形式:^(0|1-9*)$
  • 一个 0 或者一个不以 0 开头的数字.我们还可以允许开头有一个负号:^(0|-?1-9*)$
  • 这表示一个 0 或者一个可能为负的开头不为 0 的数字.让用户以 0 开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^0-9+(.0-9+)?$
  • 必须说明的是,小数点后面至少应该有 1 位数,所以”10.”是不通过的,但是 “10″ 和 “10.2″ 是通过的:^0-9+(.0-9{2})?$
  • 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^0-9+(.0-9{1,2})?$
  • 这样就允许用户只写一位小数。下面我们该考虑数字中的逗号了,我们可以这样:^0-9{1,3}(,0-9{3})*(.0-9{1,2})?$
  • 1 到 3 个数字,后面跟着任意个 逗号+3 个数字,逗号成为可选,而不是必须:^(0-9+|0-9{1,3}(,0-9{3})*)(.0-9{1,2})?$
  • 备注:这就是最终结果了,别忘了”+”可以用”*”替代。如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里

xml 文件:^(a-zA-Z+-?)+a-zA-Z0-9+\.x|Xl|L$

中文字符的正则表达式:\u4e00-\u9fa5

双字节字符:^\x00-\xff

空白行的正则表达式:\n\s*\r (可以用来删除空白行)

HTML 标记的正则表达式:<(\S*?)^>*>.*?</\1>|<.*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)

首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

腾讯 QQ 号:1-9{4,} (腾讯 QQ 号从 10000 开始)

中国邮政编码:1-9\d{5}(?!\d) (中国邮政编码为 6 位数字)

IP 地址:\d+.\d+.\d+.\d+ (提取 IP 地址时有用)

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:PHP开发中常用的正则表达式

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档