正则表达式(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)$
钱的输入格式:
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开发中常用的正则表达式