跳到主要内容

正则表达式在JavaScript中的实践

· 3 分钟阅读

使用JavaScript进行实践。

在JavaScript中,正则表达式也是对象,这些模式用于RegExpexectest以及Stringmatch replace search等方法

正则表达式很少有最终方案,更常见的情况是取决于对不确定性的容忍程度,同时存在多种解决方法。

创建一个正则表达式

字面量的方式

// 两个斜杠之间的模式组成

/[0-9]/

RegExp

调用RegExp对象的构造函数

new RegExp("[0-9]")

标志

标志描述
g全局搜索
i不区分大小写搜索
m多行搜索

/pattern/flagsnew RegExp("pattern", "flags")

常用正则表达式

匹配手机号

因为手机号经常性更新,放出新号段,不用限制太死。

以1开头数字重复10次,组成11位手机号。

const PHONE_NUMBER_REGEXP = /^1\d{10}$/;export const isPhoneNumber = (phoneNumber?: string) => {  if (!phoneNumber) {    return false;  }  return PHONE_NUMBER_REGEXP.test(phoneNumber);};

验证身份证

  1. 一个有18位

  2. 前6位是地区代码,其中第一位取值在1~8

  3. 8位出生年月日

  4. 后续3位是顺序码

  5. 最后一位是校验码(数字或者X)

简单版

/[1-8]\d{16}[0-9X]/i

严格版

正则说明
[1-8]\d{5}前6位
[1|2]\d{3}
[01]\d
[0-3]\d{4}日 + 3位顺序码
(\d|x)最后一位是校验码
const ID_CARD_REGEXP = /^[1-8]\d{5}[1-2]\d{3}[01]\d[0-3]\d{4}(\d|X)$/i;export const isIDCard = (IDCard?: string) => {  if (!IDCard) {    return false;  }  return ID_CARD_REGEXP.test(IDCard);};

匹配电子邮箱地址

简单版

/^\w+@\w+\.\w+/i

这种如果是aa.aa@aa.com就匹配不上了。

严格版

const EMAIL_NUMBER_REGEXP = /^(\w+\.)*\w+@(\w+\.)+[A-Za-z]+/i;

export const isEmail = (email?: string) => {
if (!email) {
return false;
}
return EMAIL_NUMBER_REGEXP.test(email);
};

匹配ip地址

简单版

/(\d{1,3}\.){3}\d{1,3}/i

严格版

const IP_REGEXP =  /^(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))$/;export const isIP = (IP?: string) => {  if (!IP) {    return false;  }  return IP_REGEXP.test(IP);};

匹配URL地址

简单版

/^https?:\/\/[-\w.]+(:\d+)?(\/([\w\/_.]*)?)?$/i

严格版

const URL_REGEXP = /^https?:\/\/(\w*:\w*@)?[-\w.]+(:\d+)?(\/([\w\/_.]*(\?\S+)?)?)?$/i;export const isURL = (URL?: string) => {  if (!URL) {    return false;  }  return URL_REGEXP.test(URL);};

匹配中文字

const CHINESE_REGEXP = /^[\u4e00-\u9fa5]*$/;export const isOnlyChinese = (chinese?: string) => {  if (!chinese) {    return false;  }  return CHINESE_REGEXP.test(chinese);};

源码