使用JavaScript进行实践。
在JavaScript中,正则表达式也是对象,这些模式用于RegExp的exec
和test
以及String 的match
replace
search
等方法
正则表达式很少有最终方案,更常见的情况是取决于对不确定性的容忍程度,同时存在多种解决方法。
创建一个正则表达式
字面量的方式
由//
两个斜杠之间的模式组成
/[0-9]/
RegExp
调用RegExp
对象的构造函数
new RegExp("[0-9]")
标志
标志 | 描述 |
---|---|
g | 全局搜索 |
i | 不区分大小写搜索 |
m | 多行搜索 |
/pattern/flags
或 new 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);
};
验证身份证
一个有18位
前6位是地区代码,其中第一位取值在1~8
8位出生年月日
后续3位是顺序码
最后一位是校验码(数字或者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);
};