0%

13

自动摘要: 1.正则表达式(RegularExpression)是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(“元字符”) 2.正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则 ……..

  1. 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(“元字符”)
  2. 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串
  3. 正则表达式的作用:
    1. 测试字符串内的模式。例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡模式,这称为数据验证
    2. 替换文本。可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它
    3. 基于模式匹配从字符串中提取子字符串。可以查找文档内或输入域内特定的文本
  4. 正则表达式-语法
    1. 普通字符:所有大写小写字母,所有数字,所有标点符号和一些其他符号

      符号 描述
      [ABC] 匹配[….]中的所有字符
      [^ABC] 匹配除了[….]中字符的所有其他字符
      [A-Z] 一个区间,匹配所有大写字母
      [a-z] 匹配所有小写字母
      . 匹配除了换行符(\n,\r)之外的任何单个字符,相当于[^\n\r]
      [\s\S] 匹配所有。\s是匹配所有空白符,包括换行,\S匹配所有非空白符,不包括换行
      \w 匹配字母,数字,下划线。等价于[A-Za-z0-9_]
    2. 非打印字符

    3. 特殊字符

符号 描述
$ 匹配输入字符串的结尾位置,如果设置了RegExp对象的Multiline属性,则$也匹配‘\n’或‘\r’。要匹配$字符本身,要使用\$
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用\(和\)
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式1次或多次。
[ 标记一个中括号表达式的开始
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。如:’n’匹配字符’n’,’\n’匹配换行符。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符几何。要匹配^字符本身,请使用\^
{ 标记限定符表达式的开始
| 指明两项之间的一个选择
  1. 限定符

    字符 描述
    {n} n是一个非负整数。匹配确定的n次。例如,o{2}不能匹配”Blob”中的o,但是能匹配“food”中的两个o
    {n,} n是一个非负整数。至少匹配n次,例如,o{2,}不能匹配”Blob”中的o,但是能匹配”fooooood”中的所有o。o{}
    {n,m} m和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次。例如:{1,3}将匹配”fooood”中的前三个o。o{0,1}等价于o?。注意在逗号和两个数之间不能有空格
  2. 正则表达式-修饰符(标记)

    1. 正则表达式的标记用于指定额外的匹配策略
    2. 标记位于正则表达式之外,格式:/pattern/flags
      修饰符 含义 描述
      i ignore - 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写:A和a没区别
      g global - 全局匹配 查找所有的匹配项
      m multi line - 多行匹配 使边界字符^和$匹配每一行的开头和结尾。是多行的开头和结尾,不是整个字符串的开头和结尾
      s 特殊字符圆点 . 中包含换行符\n 默认情况下的圆点,是匹配除换行符\n之外的任何字符,加s修饰符之后,. 中包含换行符\n
  3. 正则表达式-元字符

  4. 正则表达式-运算符优先级

    1. 从左到右运算,并遵循优先级顺序。相同优先级的从左到右运算,不同优先级的运算先高后低。
      运算符 描述
      \ 转义符
      (),(?:),(?=),[] 圆括号和方括号
      *,+,?,{n},{n,},{n,m} 限定符
      ^,$,\任何元字符、任何字符 定位点和序列(即:位置和顺序)
      | 替换,”或“操作字符具有高于替换运算符的优先级,使得”m|food”匹配”m”或”food”。若要匹配”mood”或”food”,请使用括号创建子表达式,从而产生”(m|f)ood”
  5. 常用的正则表达式

    1. 检验数字的表达式
      • 数字:^[0-9]*$
      • n位的数字:^\d{n}$
      • 至少n位的数字:^\d{n,}$
      • m-n位的数字:^\d{n,m}$
      • 零或非零开头的数字:^(0|[1-9][0-9]*)$
      • 非零开头的最多带两位小数的数字:^([1-9][0-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][0-9]){1,3}$ 或 ^+?[1-9][0-9]$
      • 非零的负整数:^-[1-9][]0-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])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$**
      • 负浮点数:^-([1-9]\d.\d*|0.\d[1-9]\d*)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$**
      • 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d.\d*|0.\d[1-9]\d*|0?.0+|0)$**
    2. 校验字符的表达式
      • 汉字:^[\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]+**
      • 禁止输入含有的字符:**[^]+**
    3. 特殊需求表达式
      • Email地址:*^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$**
      • 域名:**[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?**
      • InternetURL:**[a-zA-z]+://[^\s]* 或 ^http://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$*
      • 手机号码:^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-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}
      • 电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
      • 身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:**(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)**
      • 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
      • 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
      • 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):*^(?=.\d)(?=.[a-z])(?=.[A-Z])[a-zA-Z0-9]{8,10}$**
      • 强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在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]|1[0-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-9]*$
        • 这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0”不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
        • 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-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|X][m|M][l|L]$
      • 中文字符的正则表达式:**[\u4e00-\u9fa5]**
      • 双字节字符:**[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))**
      • 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
      • HTML标记的正则表达式:**<(\S*?)[^>]>.?|<.? /> ( 首尾空白字符的正则表达式:^\s|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)**
      • 腾讯QQ号:**[1-9][0-9]{4,} (腾讯QQ号从10000开始)**
      • 中国邮政编码:**[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)**
      • IPv4地址:**((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}**

欢迎关注我的其它发布渠道