一:正則表達式:
是一種特殊的字符串模式,用於匹配一組字符串,定義一種規則去匹配一組符合規格的字符;
常用的正則匹配工具
在線匹配工具:
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('不合法郵編');
}
});