Skip to content

常用正则表达式大全

1. 手机号(中国大陆)

正则表达式:

ts
^1[3-9]\d{9}$

说明:

  • ^ 字符串开头
  • 1 手机号以 1 开头
  • [3-9] 第二位为 3~9
  • \d{9} 后续 9 位数字
  • $ 字符串结尾

通过示例: 13812345678, 15900001111

不通过示例: 12812345678, 1381234567, 8613812345678

TypeScript 校验函数:

ts
export const isValidPhone = (value: string): boolean =>
  /^1[3-9]\d{9}$/.test(value);

2. 邮箱

正则表达式:

ts
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

说明:

  • ^ 开头
  • [a-zA-Z0-9._%+-]+ 用户名部分
  • @ 必须包含
  • [a-zA-Z0-9.-]+ 域名
  • \. 顶级域名前的点
  • [a-zA-Z]{2,} 顶级域名至少两位
  • $ 结尾

通过示例: user@example.com, abc_123@qq.com

不通过示例: user@domain, user@@domain.com

TypeScript 校验函数:

ts
export const isValidEmail = (value: string): boolean =>
  /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value);

3. URL

正则表达式:

ts
^(https?:\/\/)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(\/\S*)?$

说明:

  • (https?:\/\/)? 可选协议头
  • ([a-zA-Z0-9-]+\.)+ 域名及子域名
  • [a-zA-Z]{2,} 顶级域名
  • (\/\S*)? 可选路径

通过示例: https://www.example.com, www.google.com

不通过示例: htp://example.com, example

TypeScript 校验函数:

ts
export const isValidURL = (value: string): boolean =>
  /^(https?:\/\/)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(\/\S*)?$/.test(value);

4. 年月(YYYY-MM)

正则表达式:

ts
^(19|20)\d{2}-(0[1-9]|1[0-2])$

说明:

  • (19|20)\d{2} 年份 1900-2099
  • (0[1-9]|1[0-2]) 月份 01-12

通过示例: 2024-01, 1999-12

不通过示例: 24-01, 2024-13

TypeScript 校验函数:

ts
export const isValidYearMonth = (value: string): boolean =>
  /^(19|20)\d{2}-(0[1-9]|1[0-2])$/.test(value);

5. 日期(YYYY-MM-DD)

正则表达式:

ts
^(?:(?:19|20)\d{2})-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|02-(?:0[1-9]|1\d|2[0-9]))$

说明:

  • 匹配 YYYY-MM-DD 格式
  • 1、3、5、7、8、10、12 月允许 31 天
  • 4、6、9、11 月允许 30 天
  • 2 月允许 29 天

通过示例: 2025-10-22, 2000-01-01

不通过示例: 2025-02-30, 2025/10/22

TypeScript 校验函数:

ts
export const isValidDate = (value: string): boolean =>
  /^(?:(?:19|20)\d{2})-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|02-(?:0[1-9]|1\d|2[0-9]))$/.test(
    value
  );

6. 邮政编码

正则表达式:

ts
^[1-9]\d{5}$

说明:

  • [1-9] 首位非 0
  • \d{5} 后续 5 位数字

通过示例: 215000, 100000

不通过示例: 012345, 21500a

TypeScript 校验函数:

ts
export const isValidPostalCode = (value: string): boolean =>
  /^[1-9]\d{5}$/.test(value);

7. 密码(至少 8 位,含字母和数字)

正则表达式:

ts
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$

说明:

  • (?=.*[A-Za-z]) 至少一个字母
  • (?=.*\d) 至少一个数字
  • [A-Za-z\d]{8,} 长度至少 8 位,由字母和数字组成

通过示例: abc12345, A1bcdefg

不通过示例: 12345678, abcdefg, abc_1234

TypeScript 校验函数:

ts
export const isValidPassword = (value: string): boolean =>
  /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/.test(value);