g 默认情况下,第一次匹配成功后,正则对象就向下匹配,g修饰符表示全局匹配 i 默认情况下,正则对象区分字母的大小写,加上i修饰符以后表示忽略大小写 m 表示多行模式,会修改^和$的行为,默认情况下,^和$匹配字符串的开始处和结尾处,加上m修饰符后,^和$会识别换行符\n 7、预定义模式 指某些常见的简写方式(注意大小写):
// 规则对象(flag) var flag = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>《》/?~!@#¥……&*()——|{}【】‘;:”“'。,、? ]")
// 判断 even 是否包含特殊字符 if(flag.test(even)){ console.log('包含!') }else{ console.log('不包含!') }
} flag 规则对象中还有很多其他特殊字符,这里的demo已经足够使用,如项目另有需求加入其他特殊字符即可。
另一种方法
js正则 判断是否包含特殊符号
function chack_name(str){ var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>《》/?~!@#¥……&*()——|{}【】‘;:”“'。,、? ]"); if (pattern.test(str)){ return true; } return false; }
5 个回复
nccloud
一、校验数字的表达式
二、校验字符的表达式
三、特殊需求表达式
nccloud
RegExp正则表达式规则以及常用正则表达式
简介
一个正则表达式就是一个模式与三个标志的组合体
三个标志
g :表示全局模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止
i :表示不区分大小写模式,即在确定匹配项时忽略模式与字符串的大小写
m :表示多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项
检测函数
test()
作用:搜索字符串指定的值,根据结果并返回真或假,参数为需要检测的字符串
var patt1=new RegExp("e");
alert(patt1.test("The best things in life are free")); //true
注意:当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)
var str = 'runoob';
var patt1 = new RegExp('\\w', 'g'); // 有转义作为正则表达式处理
var patt2 = new RegExp('\w', 'g'); // 无转义作为字符串处理
var patt3 =/\w+/g; // 与 patt1 效果相同
alert(patt1.test(str)) //输出 true
alert(patt2.test(str)) //输出 false
alert(patt3.test(str)) //输出 true
exec()
作用:检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null
var patt1=new RegExp("e");
document.write(patt1.exec("The best things in life are free"));
常用正则表达式
一、校验数字的表达式
1 数字:^[0-9]*$
2 n位的数字:^\d{n}$
3 至少n位的数字:^\d{n,}$
4 m-n位的数字:^\d{m,n}$
5 零和非零开头的数字:^(0|[1-9][0-9]*)$
6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
8 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
11 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
12 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
13 非负整数:^\d+$ 或 ^[1-9]\d*|0$
14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
二、校验字符的表达式
1 汉字:^[\u4e00-\u9fa5]{0,}$
2 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3 长度为3-20的所有字符:^.{3,20}$
4 由26个英文字母组成的字符串:^[A-Za-z]+$
5 由26个大写英文字母组成的字符串:^[A-Z]+$
6 由26个小写英文字母组成的字符串:^[a-z]+$
7 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
8 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
9 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
12 禁止输入含有~的字符:[^~\x22]+
三、特殊需求表达式
1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
4 手机号码:^(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}$
5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
7 身份证号(15位、18位数字):^\d{15}|\d{18}$
8 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
11 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
12 日期格式:^\d{4}-\d{1,2}-\d{1,2}
13 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
14 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
15 钱的输入格式:
(1).有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
(2).这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
(3).一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
(4).这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
(5).必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
(6).这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
(7).这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
(8).1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
16 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
17 中文字符的正则表达式:[\u4e00-\u9fa5]
18 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
19 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
20 HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
21 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
22 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
23 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
24 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)
25 IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)) (由@飞龙三少 提供,感谢共享)
正则表达式常用应用(未验证)
计算字符串的长度
说明:一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){
return this.replace([^x00-xff]/g,"aa").length;
}
trim (去除首位空格)
说明:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现
String.prototype.trim = function(){
return this.replace(/(^s*)|(s*$)/g, "");
}
分解和转换IP地址
说明:利用正则表达式分解和转换IP地址
function IP2V(ip) //IP地址转换成对应数值
{
re = /(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式
if (re.test(ip)) {
return RegExp.$1 * Math.pow(255, 3)) + RegExp.$2 * Math.pow(255, 2)) + RegExp.$3 * 255 + RegExp.$4 * 1
} else {
throw new Error("Not a valid IP address!")
}
}
从URL地址中提取文件名
s="http://www.9499.net/page1.htm";
s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2") ; //Page1.htm
限制网页表单里的文本框输入内容
//用正则表达式限制只能输入中文
onkeyup="value="/blog/value.replace(/["^u4E00-u9FA5]/g,'') "
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
//用正则表达式限制只能输入全角字符:
onkeyup="value="/blog/value.replace(/["^uFF00-uFFFF]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
//用正则表达式限制只能输入数字:
onkeyup="value="/blog/value.replace(/["^d]/g,'') "onbeforepaste= "clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
//用正则表达式限制只能输入数字和英文:
onkeyup="value="/blog/value.replace(/[W]/g,"'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''
nccloud
什么是正则表达式?
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式常用的验证方法
1、test()
返回一个布尔值,方法用于匹配字符串,匹配成功返回true,失败返回false。
var reg = /abc/;
var str = 'abcdefg';
str = reg.test(str);
console.log(str);
2、exec()
返回匹配结果,发现匹配,就返回一个以每个匹配成功的字符串组成的类数组集合,否则返回null。
此方法属性:
index:表示匹配项在字符串的位置
input:表示原字符串
var reg = /abc/;
var str = 'abcdefg';
str = reg.exec(str);
console.log(str);
正则表达式的匹配规则
1、字面量字符
在正则表达式中,某个字符只能表示它字面的含义,比如/a/匹配a,包括数字、大小写和一部分符号
2、元字符
出字面量字符以外,还有一部分字符有特殊含义,不代表字面意思,叫“元字符”。如果要匹配他们本身,需要在它们前面加上反斜杠进行转义,比如匹配+,就要写成\+
正则中需要用斜杠转义的字符:
^、.、[、] 、( 、)、$、|、*、+、?、{、}、\\
特殊字符:
点字符:匹配除了回车\r、换行\n、行分隔符\u2028、段分隔符\u2029
位置字符:^ 表示字符串的开始位置,$ 表示字符串的结束位置
竖线符号:在正则表达式中表示“或关系”即a|b表示匹配a或b
3、重复类
模式的精确匹配次数,用大括号{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次
4、量词符
? 问号表示某个模式出现,等同于{0,1} 最多1次
* 星号表示某个模式出现0次或多次,等同于{0,} 无影响
+ 加号表示某个模式出现1次或多次,等同于{1,} 至少1次
5、字符类
表示有一系列字符可供选择,只要匹配其中一个就可以,所有可供选择的字符都放在方括号内,如:[abc],表示a、b、c之中任选一个匹配。
^ 脱字符:如果方括号内的第一个字符是[^],则表示除了字符类中的字符,其他字符都可以匹配,如:[^abc]表示除了a、b、c之外,都可以匹配。
- 连字符:对于连续序列的字符,连字符用来提供简写形式,表示字符的连续范围,如:[abc]可写成[a-c]、[012345679]可写成[0-9]、[A-Z]表示26个大写字母。
中文:[\u4e00-\u9fa5]
6、修饰符(模式修正符)
修饰符表示模式的附加规则,放在正则模式的最尾部,修饰符可以单个使用,也可以多个一起使用
g 默认情况下,第一次匹配成功后,正则对象就向下匹配,g修饰符表示全局匹配
i 默认情况下,正则对象区分字母的大小写,加上i修饰符以后表示忽略大小写
m 表示多行模式,会修改^和$的行为,默认情况下,^和$匹配字符串的开始处和结尾处,加上m修饰符后,^和$会识别换行符\n
7、预定义模式
指某些常见的简写方式(注意大小写):
\d 匹配0-9之间的任一数字,相当于[0-9]
\D 匹配所有0-9以外的字符,相当于^[0-9]
\w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9]
\W 除所有字母、数字和下划线以外的字符,相当于[^A-za-z0-9]
\s 匹配空格、包括制表符、空格符、断行符等
\S 匹配非空格的字符
\b 匹配单词的后边界
\B 匹配非单词边界
特殊字符:
[\b] 匹配退格键
\n 匹配换行符
\r 匹配回车键
\f 匹配换页符
\t 查找制表符tab
8、组匹配
正则表达式的括号表示分组匹配,括号中的模式可以用来匹配分组的内容。
如:
var str = 'abcdef';
var reg = /[(abc),(def)]/;
str.match(reg);
console.log(str);
输出结果:
正则表达式的匹配方法
match() 接受一个参数,正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功就返回null
search() 参数与match相同,返回字符串中第一个匹配项的索引,没有匹配项返回-1
replace() 用于替换,接受两个参数,第一个是匹配项,第二个可以是字符串或是一个函数
nccloud
前言
有时,我们希望判断文本框中用户输入的字符是否含有特殊符号(*/#$@),就像用户注册时密码框的填写。
demo
利用 RegExp 对象,能很优雅的实现以上需求:
// even(文本框内容)
function (even) {
// 规则对象(flag)
var flag = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>《》/?~!@#¥……&*()——|{}【】‘;:”“'。,、? ]")
// 判断 even 是否包含特殊字符
if(flag.test(even)){
console.log('包含!')
}else{
console.log('不包含!')
}
}
flag 规则对象中还有很多其他特殊字符,这里的demo已经足够使用,如项目另有需求加入其他特殊字符即可。
另一种方法
js正则 判断是否包含特殊符号
function chack_name(str){
var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>《》/?~!@#¥……&*()——|{}【】‘;:”“'。,、? ]");
if (pattern.test(str)){
return true;
}
return false;
}
nccloud
匹配不包含指定字符的行:
#比如不能包含 0B
^((?! 0B ).)*$
匹配空行:
^(\t)*$\n
1.删除冗余信息
2.数据换行合并
3.剔除非0B行
4.剔除空行
5.增加前缀、后缀