详解正则表达式-特殊字符、密码、电话号码、数字

192 阅读3分钟

前置知识

^

在正则表达式中,是一个元字符,在正则表达式中的主要作用是用来指定匹配字符串的开始位置或者进行字符集合的取反操作,有两种不同的用法:

  • ^ 用在正则表达式的开头,表示匹配字符串的开始位置。

正则表达式 ^abc 表示匹配以 "abc" 开头的字符串。

  • ^ 用在字符集合中,表示取反操作。

[^a-z] 表示匹配除了小写字母 a-z 之外的任意字符。

\d

是一个正则表达式中用来匹配数字的特殊字符。

在正则表达式中,\d 表示匹配任意一个数字字符,等价于 [0-9]。因此,当使用 \d 时,表示匹配一个数字字符(0-9)。

\b

匹配单词边界,即单词和空格之间的位置

\w

匹配一个单词字符,包括字母、数字和下划线,等价于 [a-zA-Z0-9_]

\s

匹配一个空白字符,包括空格、制表符、换行符等

[]

用来定义字符集合,匹配方括号中的任意一个字符

[^]

在字符集合中使用,表示取反操作,匹配除了方括号中字符之外的任意字符。

()

用来分组表达式,可以对其中的内容进行捕获

|

用来表示或的关系,匹配两边任意一边的内容

$

匹配字符串的结束位置。

.

匹配任意单个字符,除了换行符

*

匹配前面的字符零次或多次

+

匹配前面的字符一次或多次

?

匹配前面的字符零次或一次,表示可选

{m,n}

{m,n} 是正则表达式中的量词,用来指定前面的字符或字符类别的重复次数范围,

具体来说:

  • `{8,50}` 表示匹配前面的模式至少 8 次,最多 50 次。

  • /^[a-zA-Z0-9!@#$%&_.?]{8,50}$/,这个正则表达式表示:字符串必须以小写字母、大写字母、数字或特定的符号(`!@#$%&_.?`)开头,紧随其后的字符可以是前述字符类别中的任意组合,重复次数在 8 到 50 之间。

例子

使用正则表达式来检查字符串是否包含特殊字符,同时排除中文字符

/[^\u4e00-\u9fa5\w\s]/
  • [ ]: 表示一个字符集合,匹配其中的任意一个字符。
  • ^: 在字符集合中的开头表示取反,即匹配不在集合内的字符。
  • \u4e00-\u9fa5: Unicode范围,表示匹配所有中文字符。
  • \w: 表示匹配任何字母、数字或下划线字符(相当于`[a-zA-Z0-9_]`)。
  • \s: 表示匹配任何空白字符,包括空格、制表符、换行符等。

因此,正则表达式`[^\u4e00-\u9fa5\w\s]`的含义是匹配除了中文字符、字母、数字、下划线和空白字符以外的任意字符。也就是说,这个正则表达式用来检查字符串中是否包含除中文字符以外的特殊字符。

密码

/^[a-zA-Z0-9!@#$%&_.?]{8,50}$/
  • 方括号表示其中任意一个字符都可以匹配;

  • {8,50}:表示匹配的长度范围在8到50之间;

  • $:表示匹配字符串结尾;

  • 只能输入数字、英文、英文字符、特殊字符,限8~50个字符。

电话号码

/^1[3456789]\d{9}$/
  • ^1:表示手机号码开头必须是数字1;
  • [3456789]:表示接下来的一位数字可以是3、4、5、6、7、8、9中的任意一个;
  • \d{9}:表示后面需要匹配9位数字;
  • $:表示匹配字符串结尾。

数字的正则表达式

  1. 整数:匹配包括正整数和负整数

    /-?\d+/
    

    这个正则表达式的含义是:

    • -?:可选的负号,表示整数可以是正数或负数;
    • \d+:匹配一个或多个数字。
  2. 浮点数:匹配包括整数部分和小数部分的数字

    /-?\d+(\.\d+)? ^-?\d*\.?\d+$/
    

    这个正则表达式的含义是:

    • -?:可选的负号,表示浮点数可以是正数或负数;
    • \d+:匹配一个或多个数字作为整数部分;
    • (\.\d+)?:可选的小数部分,包括小数点和一个或多个数字。
  3. 小数点后仅能保留两位小数

    /^-?\d+(\.\d{1,2})?$/
    
  4. [0,1000]范围的整数,数字前不能输入0

    /^(0|1000|[1-9]\d{0,2})$/
    
  5. 输入[0,1000]范围内数字,小数点后限两位数,不能输入多余的0

    /^(1000(\.0{1,2})?|(0|[1-9]\d{0,2})(\.\d{1,2})?)$/