一:正则表达式:
是一种特殊的字符串模式,用于匹配一组字符串,定义一种规则去匹配一组符合规格的字符;
常用的正则匹配工具
在线匹配工具:
1 http://www.regexpal.com/
2 http://rubular.com/
正则匹配软件
正则字符:
"^" 匹配字符串起始位置
“$” 结束位置
“\w” 匹配字母,数字,下划线
“.” 匹配换行以外的任何字符
“[abc]”字符组 匹配包含括号内元素的符号
“\s”匹配空格
“\d”匹配数字
写法改成大写就是反义
"\W" 匹配任意不是字母,数字,下划线 的字符
"\S" 匹配任意不是空白符的字符
"\D" 匹配任意非数字的字符
"\B" 匹配不是单词开头或结束的位置
"[^abc]" 匹配除了abc以外的任意字符
量词:
“*” 重复0次或更多次
“+” 重复1次或更多次
“?” 重复0次或一次
“{n}” 重复n次
“{n,m}” 重复n次到m次 包括临界值
“{n,}” 重复n次或多次
捕获分组
先了解在正则中捕获分组的概念,其实就是一个括号内的内容 如 "(\d)\d" 而"(\d)" 这就是一个捕获分组,可以对捕获分组进行 后向引用 (如果后而有相同的内容则可以直接引用前面定义的捕获组,以简化表达式) 如(\d)\d\1 这里的"\1"就是对"(\d)"的后向引用
那捕获分组有什么用呢看个例子就知道了
如 "zery zery" 正则 \b(\w+)\b\s\1\b 所以这里的"\1"所捕获到的字符也是 与(\w+)一样的"zery",为了让组名更有意义,组名是可以自定义名字的
"\b(?<name>\w+)\b\s\k<name>\b" 用"?<name>"就可以自定义组名了而要后向引用组时要记得写成 "\k<name>";自定义组名后,捕获组中匹配到的值就会保存在定义的组名里
下面列出捕获分组常有的用法
"(exp)" 匹配exp,并捕获文本到自动命名的组里
"(?<name>exp)" 匹配exp,并捕获文本到名称为name的组里
"(?:exp)" 匹配exp,不捕获匹配的文本,也不给此分组分配组号
以下为零宽断言
"(?=exp)" 匹配exp前面的位置
如 "How are you doing" 正则"(?<txt>.+(?=ing))" 这里取ing前所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为"How are you do";
"(?<=exp)" 匹配exp后面的位置
如 "How are you doing" 正则"(?<txt>(?<=How).+)" 这里取"How"之后所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为" are you doing";
"(?!exp)" 匹配后面跟的不是exp的位置
如 "123abc" 正则 "\d{3}(?!\d)"匹配3位数字后非数字的结果
"(?<!exp)" 匹配前面不是exp的位置
如 "abc123 " 正则 "(?<![0-9])123" 匹配"123"前面是非数字的结果也可写成"(?!<\d)123"
正则验证邮箱 用户 姓名 密码
<style type="text/css">
#container{
width:700px;
margin:0px auto;
}
form{
margin:0px auto;
width:450px;
}
</style>
<script src="js/jQuery1.11.1.js"></script>
<script type="text/javascript">
//用户名验证
function checkUserName(){
//2.获取用户输入的用户名
var username=$("[name=txtName]");
var unameValue=username.val();
//1.1 锁定到消息框
var userMsg=$("#userMsg");
if (unameValue=="") {
//给消息框添加 提示消息
//1.2html属性赋值
userMsg.html("用户名不能为空");
return false;
}
userMsg.html("");
return true;
}
//用户名验证
function checkPassword(){
//2.获取用户输入的密码
var pwd=$("[name=txtPwd]").val();
var pwdMsg=$("#pwdMsg");
if (pwd=="") {
//1.2html属性赋值
pwdMsg.html("密码不能为空");
return false;
}
if(pwd.length<6||pwd.length>12){
pwdMsg.html("密码长度需要保证在6---12位之间");
return false;
}
pwdMsg.html("");
return true;
}
//检测邮箱
function checkEmail(){
var reg=/^\w+@\w+\.\w+$/;
var email=$("[name=txtEmail]").val();
var result=reg.test(email);
if(!result){
//邮箱不合法
$("#emailMsg").html("邮箱不合法");
return false;
}
$("#emailMsg").html("");
return true;
}
$(function(){
//当用户名失去焦点的时候,也要验证
var username=$("[name=txtName]");
username.blur(function(){
checkUserName();
});
var pwd=$("[name=txtPwd]");
pwd.blur(function(){
checkPassword();
});
var email=$("[name=txtEmail]");
email.blur(function(){
checkEmail();
});
//用户没有输入,不能提交
//1.点击登录 触发的是表单的submit事件
$("#form1").submit(function(){
//1 三师兄 pass
//2 二师兄 pass
//3 大师兄 pass
var sum=0;
if (!checkUserName()) {
sum=sum+1;
}
if (!checkPassword()) {
sum=sum+1;
}
if(!checkEmail()){
sum=sum+1;
}
if(sum==0){
return true;
}else{
return false;
}
});
});
</script>
</head>
<body>
<div id="container">
<form action="Success.html" id="form1"method="get">
用户名:<input type="text" name="txtName"/> <span id="userMsg"></span><br />
密码:<input type="password" name="txtPwd" /><span id="pwdMsg"></span><br />
邮箱:<input type="text" name="txtEmail" /><span id="emailMsg"></span><br />
<input type="submit" value="Login" />
</form>
</div>
</body>
</html>
简单的正则规定邮箱符
* 邮编:6位 \d{6}
* 11位的手机号 \d{11} yymqqc@126.com.cn.net.org
* 邮箱: \w+@\w+(\.\w+){1,4}
* 验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
$(function() {
var reg = /^\d{6}$/;
var email = $("#email").val();
var flag = reg.test(email);
if (flag) {
alert('合法邮编');
} else {
alert('不合法邮编');
}
});