js 正则规则 和 常用正则表达式
一、基础正则规则
- 匹配特定字符
- 匹配数字:
\d:匹配一个数字(0-9)。
\d+:匹配一个或多个数字。
示例:/\d+/g 可以匹配字符串中的所有数字。
- 匹配字母或单词:
\w:匹配一个字母、数字或下划线([A-Za-z0-9_])。
\w+:匹配一个或多个字母、数字或下划线。
示例:/\w+/g 可以匹配字符串中的所有单词。
- 匹配空白字符:
\s:匹配一个空白字符(空格、制表符、换行等)。
\s+:匹配一个或多个空白字符。
示例:/\s+/g 可以匹配字符串中的所有空白。
- 匹配特定位置
- 匹配开头和结尾:
^:匹配字符串的开头。
$:匹配字符串的结尾。
示例:/^Hello/ 匹配以 Hello 开头的字符串。
- 匹配单词边界:
\b:匹配单词的边界(单词的开头或结尾)。
示例:/\bcat\b/ 匹配独立的单词 cat,而不会匹配 category 中的 cat。
- 匹配重复模式
- 匹配固定次数:
{n}:匹配前面的字符恰好 n 次。
示例:/\d{3}/ 匹配连续的 3 个数字。
- 匹配范围次数:
{n,m}:匹配前面的字符至少 n 次,最多 m 次。
示例:/\d{2,4}/ 匹配 2 到 4 个连续数字。
- 匹配零次或多次:
*:匹配前面的字符零次或多次。
示例:/a*/ 可以匹配 ''(空)、'a'、'aa' 等。
- 匹配一次或多次:
+:匹配前面的字符一次或多次。
示例:/a+/ 可以匹配 'a'、'aa',但不能匹配 ''。
- 匹配零次或一次:
?:匹配前面的字符零次或一次。
示例:/a?/ 可以匹配 '' 或 'a'。
- 匹配字符集合
- 匹配特定字符:
[abc]:匹配 a、b 或 c 中的任意一个字符。
示例:/[aeiou]/g 匹配字符串中的所有元音字母。
- 匹配字符范围:
[a-z]:匹配任意小写字母。
[A-Z]:匹配任意大写字母。
[0-9]:匹配任意数字。
示例:/[a-zA-Z]/g 匹配所有字母(大小写均可)。
- 排除特定字符:
[^abc]:匹配除了 a、b、c 之外的任意字符。
示例:/[^0-9]/g 匹配所有非数字字符。
- 分组和捕获
- 分组:
(abc):将 abc 作为一个分组。
示例:/(\d{2})-(\d{2})/ 可以匹配 12-34,并捕获 12 和 34。
- 非捕获分组:
(?:abc):分组但不捕获。
示例:/(?:\d{2})-(\d{2})/ 匹配 12-34,但只捕获 34。
- 贪婪与非贪婪匹配
- 贪婪匹配:
默认情况下,正则表达式会尽可能多地匹配字符。
示例:/a.*b/ 匹配 'aabab' 中的 'aabab'。
- 非贪婪匹配:
在量词后加 ?,表示尽可能少地匹配字符。
示例:/a.*?b/ 匹配 'aabab' 中的 'aab'。
二、常用正则表达式
- 邮政编码: 6位数字
var postcodeRE=/^\d{6}$/;
- 由26个英文字母组成的字符串(包含大小写)
var englishRE=/^[A-Za-z]+$/;
- Email电子邮件地址
var emailRE=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
- InternetURL网址
// 正则1
var urlRE= /[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/;
// 正则2
var urlRE= /^(https?://)?([\da-z.-]+).([a-z.]{2,6})([/\w .-]*)*/?$/
- QQ号
var qqRE=/^[1-9]\d{4,12}$/;
- 手机号码验证
// /^[1][3,4,5,7,8,9][0-9]{9}$/ => 或者 /^1[3-9]\d{9}$/
// ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
// /^1\d{10}$/ ==>> 以1开头,11位
var mobbileRE=/^((16[0-9])|(17[0-9])|(13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$/;
- 日期格式
// YYYY-MM-DD
var dateRE = /^\d{4}-\d{2}-\d{2}$/
- 国内座机电话号码
//(0511-4405222、021-87888822)
var phoneRE=/^\d{3}-\d{8}|\d{4}-\d{7}$/;
- 身份证号码
//15位和18位身份证号码的正则表达式
//^\d{15}|\d{18}$
var idRE=/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;
- 帐号或者密码验证
//字母开头,允许5-16字节,允许字母数字下划线
var userNameRE=/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/;
//以字母开头,长度在6~18之间,只能包含字母、数字和下划线
var passwordRE=/^[a-zA-Z]\w{5,17}$/;
- IP地址
var ipRE=/((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d)(\.((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d)){3}/;
- 输入框只能输入数字并且最多两位小数
validatePrice(rule, value, callback) {
// 正则验证只能是数字并且最多两位小数 下面两个正则都可以
const result = (/^\d+(.\d{1,2})?$/).test(value);
// const result = (/^\d{1,10}(\.\d{0,2})?$/).test(value);
if (!result) {
callback(new Error('套餐金额只能是数字并且最多两位小数'));
} else {
callback();
}
}
文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出!