欢迎访问宙启技术站
智能推送

js中用正则表达式校验问题

发布时间:2023-05-14 22:56:40

正则表达式是一种用来描述字符模式的语言,主要用于字符串的匹配、查找、替换等操作。在JavaScript中,正则表达式特别常用,可以用来校验字符串的格式、提取关键信息等。

正则表达式的基础语法

在JavaScript中,我们可以使用RegExp对象或者字面量来定义正则表达式。

通过RegExp对象定义正则表达式:

let re = new RegExp('abc');    // 匹配字符串abc
let re = new RegExp('\\d+');   // 匹配数字字符
let re = new RegExp('\\w');    // 匹配任意字母、数字或下划线字符

通过字面量定义正则表达式:

let re = /abc/;    // 匹配字符串abc
let re = /\d+/;   // 匹配数字字符
let re = /\w/;    // 匹配任意字母、数字或下划线字符

正则表达式的元字符

正则表达式中有些特殊字符具有特殊的含义,称为元字符。下面是一些常用的元字符:

- \d:匹配任意数字字符,相当于[0-9]。

- \D:匹配任意非数字字符,相当于[^0-9]。

- \w:匹配任意字母、数字或下划线字符,相当于[a-zA-Z0-9_]。

- \W:匹配任意非字母、数字或下划线字符,相当于[^a-zA-Z0-9_]。

- \s:匹配任意空白字符,包括空格、制表符、换行符等。

- \S:匹配任意非空白字符。

- .:匹配任意单个字符,除了换行符和回车符。

除了这些元字符以外,还有一些表示数量的元字符:

- *:匹配前面的字符零次或多次。

- +:匹配前面的字符一次或多次。

- ?:匹配前面的字符零次或一次。

- {n}:匹配前面的字符恰好n次。

- {n,}:匹配前面的字符至少n次。

- {n,m}:匹配前面的字符至少n次,最多m次。

正则表达式的分组与捕获

在正则表达式中,可以使用小括号()来分组。分组后可以对组内的字符进行重复匹配或修改,也可以使用捕获来记录匹配的信息。

分组示例:

let re = /^(\w+)\s+(\w+)$/;   // 匹配两个单词之间的空格
let str = 'hello  world';
let result = str.match(re);
console.log(result);   // ["hello  world", "hello", "world"]

捕获示例:

let re = /(\d{4})-(\d{2})-(\d{2})/;
let str = '2022-02-22';
let result = str.match(re);
console.log(result);   // ["2022-02-22", "2022", "02", "22"]

正则表达式的匹配模式

正则表达式的匹配模式有以下几种:

- g:全局匹配模式,匹配所有符合条件的字符串。

- i:不区分大小写的匹配模式。

- m:多行匹配模式,可以匹配每一行的开头和结尾。

示例:

let re = /\d+/g;  // 匹配所有数字
let str = 'Today is 2022/2/22';
let result = str.match(re);
console.log(result);   // ["2022", "2", "22"]

正则表达式的校验方法

在JavaScript中,我们可以使用正则表达式提供的方法来校验字符串的格式。主要有以下两种方法:

- test():检测一个字符串是否匹配某个正则表达式,返回true或false。

- match():在一个字符串内搜索匹配某个正则表达式的字符串,返回匹配的数组。

test()方法示例:

let re = /^\d{4}-\d{2}-\d{2}$/;  // 检查日期格式是否为yyyy-mm-dd
let str = '2022-02-22';
let result = re.test(str);
console.log(result);   // true

match()方法示例:

let re = /\d+/g;  // 匹配所有数字
let str = 'Today is 2022/2/22';
let result = str.match(re);
console.log(result);   // ["2022", "2", "22"]

常见的校验需求

下面列举一些常见的字符串校验需求及其对应的正则表达式:

邮箱地址:

let re = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

手机号码:

let re = /^[1][3-9][0-9]{9}$/;

身份证号码:

let re = /^(\d{17}|\d{14})[\dx]$/i;

IP地址:

let re = /^((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$/;

URL地址:

let re = /^((https?|ftp):\/\/)?([\w-]+\.)+[a-zA-Z]{2,15}(\/\S*)?$/;

总结

正则表达式是JavaScript中非常重要的一部分,掌握正则表达式的基础语法和常见的校验需求是非常有用的,可以帮助我们轻松地完成字符串的格式校验、提取和替换。虽然正则表达式的语法和元字符较多,但只要我们熟能生巧,就能够快速地编写出符合要求的正则表达式。