js正则 表达式 验证
### JavaScript正则表达式验证知识点总结 #### 一、引言 在JavaScript中,正则表达式被广泛用于数据验证、字符串搜索与替换等场景。本文将基于给定的代码片段,详细介绍几种常用的正则表达式及其应用场景。 #### 二、正则表达式基础知识 在深入了解具体的验证规则之前,我们先回顾一下JavaScript中正则表达式的几个关键概念: - **元字符**:如`^`表示行的开始,`$`表示行的结束。 - **字符集**:用方括号`[]`表示,可以指定一个范围或多个字符。 - **量词**:用来限定前面的字符出现的次数,如`+`表示一次或多次,`*`表示零次或多次。 - **分组与引用**:使用圆括号`()`进行分组,通过`\1`, `\2`等引用匹配结果。 #### 三、具体验证规则及示例 ##### 1. 验证是否由数字、字母组成 ```javascript function isalphanumber(str) { var result = str.match(/^[a-zA-Z0-9]+$/); if (result == null) return false; return true; } ``` - **功能描述**:此函数用于判断传入的字符串`str`是否只包含数字或英文字母。 - **正则解释**:`^[a-zA-Z0-9]+$`中的`^`表示字符串开始,`$`表示字符串结束,中间部分表示整个字符串只能包含英文字母(大小写)或数字。 ##### 2. 验证是否为数字 ```javascript function isnumber(str) { return !isNaN(str); } ``` - **功能描述**:判断传入的字符串`str`是否能转换成数字。 - **实现原理**:使用`isNaN()`函数,该函数会尝试将输入转换为数字,如果转换失败,则返回`true`。 ##### 3. 验证是否为整数 ```javascript function isint(str) { var result = str.match(/^(-|\+)?\d+$/); if (result == null) return false; return true; } ``` - **功能描述**:验证传入的字符串`str`是否为整数。 - **正则解释**:`^(-|\+)?\d+$`中的`(-|\+)?`表示可选的负号或加号,`\d+`表示一个或多个数字。 ##### 4. 验证日期时间格式 ```javascript function isdatetime(str) { var result = str.match(/^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})(\d{1,2}):(\d{1,2}):(\d{1,2})$/); if (result == null) return false; var d = new Date(result[1], result[3] - 1, result[4], result[5], result[6], result[7]); return (d.getFullYear() == result[1] && (d.getMonth() + 1) == result[3] && d.getDate() == result[4] && d.getHours() == result[5] && d.getMinutes() == result[6] && d.getSeconds() == result[7]); } ``` - **功能描述**:验证传入的字符串`str`是否符合`"YYYY-MM-DD HH:MM:SS"`或`"YYYY/MM/DD HH:MM:SS"`格式。 - **正则解释**:`^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})(\d{1,2}):(\d{1,2}):(\d{1,2})$`中的`\d{4}`表示四位数字,`(\d{1,2})`表示一到两位数字,`(\d{1,2}):(\d{1,2}):(\d{1,2})`表示小时、分钟、秒的时间格式。 ##### 5. 验证日期格式 ```javascript function isdate(str) { var result = str.match(/^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})$/); if (result == null) return false; var d = new Date(result[1], result[3] - 1, result[4]); return (d.getFullYear() == result[1] && d.getMonth() + 1 == result[3] && d.getDate() == result[4]); } ``` - **功能描述**:验证传入的字符串`str`是否符合`"YYYY-MM-DD"`或`"YYYY/MM/DD"`格式。 - **正则解释**:同上,只是没有时间部分。 ##### 6. 验证电子邮件地址 ```javascript function isemail(str) { var result = str.match(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/); if (result == null) return false; return true; } ``` - **功能描述**:验证传入的字符串`str`是否为有效的电子邮件地址。 - **正则解释**:`^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$`中的`\w+`表示一个或多个字母、数字或下划线,`((-\w+)|(\.\w+))`表示邮箱名称中可包含短横线或点。 ##### 7. 去除字符串两端空白 ```javascript function trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } ``` - **功能描述**:去除传入字符串`str`的开头和结尾处的空白字符。 - **实现原理**:使用`replace()`方法结合正则表达式删除字符串两头的空白字符。 ##### 8. 计算字符串长度(包括中文字符) ```javascript function strlen(str) { return str.replace(/[^\x00-\xff]/g, "**").length; } ``` - **功能描述**:计算字符串`str`的长度,其中每个中文字符按两个英文字符计算。 - **实现原理**:使用正则表达式`/[^\x00-\xff]/g`匹配非ASCII字符,并将其替换为两个特殊字符,再计算总长度。 ##### 9. 验证邮政编码 ```javascript function ispostcode(str) { var result = str.match(/[1-9]\d{5}(?!\d)/); if (result == null) return false; return true; } ``` - **功能描述**:验证传入的字符串`str`是否为有效的六位数字邮政编码。 - **正则解释**:`/[1-9]\d{5}(?!\d)/`中的`[1-9]`表示首位不能为0,`\d{5}`表示后面五位都是数字。 ##### 10. 验证电话号码 ```javascript function istell(str) { var result = str.match(/\d{3}-\d{8}|\d{4}-\d{7}/); if (result == null) return false; return true; } ``` - **功能描述**:验证传入的字符串`str`是否为有效的电话号码格式,如“0511-44052220”或“21-87888822”。 - **正则解释**:`/\d{3}-\d{8}|\d{4}-\d{7}/`表示前三位加八位数字或前四位加七位数字的组合。 ##### 11. 验证数字范围 ```javascript function isint1(str) { var result = str.match(/^[0-9]$|^([1-9])([0-9]){0,3}$|^10000$/); if (result == null) return false; return true; } ``` - **功能描述**:验证传入的字符串`str`是否为0至10000之间的整数。 - **正则解释**:`/^[0-9]$|^([1-9])([0-9]){0,3}$|^10000$/`表示单个数字0至9,或者1至9999,或者是10000。 #### 四、总结 通过上述示例,我们可以看到正则表达式在JavaScript中的强大之处。无论是简单的数据类型验证还是复杂的格式检查,正则表达式都能够提供简洁而高效的解决方案。希望这些知识点能够帮助开发者更好地理解和应用正则表达式,提高日常开发效率。