function f_MobilCheck(as_SourceString)
{
if(as_SourceString.match(/^13[0-9]{9}$/g)) return true; //手機號為13開頭的11位數字
else if(as_SourceString.match(/^[0]{1}[0-9]{2,3}[2-8]{1}[0-9]{5,7}$/g)) return true; //小靈通為0開頭的3-4位的區號+不以1和9開頭的6-8位數字
return false;
}
//——–請新增函數時加註釋,盡量將同類的函數放在一起,便於查找。——Label_Name允許為空,在提示與輸入框分離時使用。——–
//——————————————-刪除字符串左空格(包括全角空格)—————-
function f_PubStrLTrim(as_SourceString)
{
return as_SourceString.replace(/^[/s ]*/,"");
}
//——————————————-刪除字符串右空格(包括全角空格)—————–
function f_PubStrRTrim(as_SourceString)
{
return as_SourceString.replace(/[/s ]*$/,"");
}
//——————————————-刪除字符串左右空格(包括全角空格)—————-
function f_PubStrTrim(as_SourceString)
{
return f_PubStrRTrim( f_PubStrLTrim(as_SourceString));
}
//——————————————-刪除字符串的全部空格(包括全角空格)—————–
function f_PubStrTrimAll(as_SourceString)
{
return as_SourceString.replace(/[/s ]*/g,"");
}
//———————————————驗證是否合法的電子郵箱地址—-合法:true—不合法:false———
function f_EmailCheck(as_SourceString)
{
return as_SourceString.match(/^([/w-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)|(([/w-]+/.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(/]?)$/g);
}
//———————————————-驗證是否不含有非法的字符–不含有,即合法:true—不合法:false————-
function f_StringCheck(as_SourceString)
{
//非法字符–(雙減號)/*(斜杠星號)'(單引號);(分號)"(雙引號)%(百分號)<(左尖括號)>(右尖括號)
if(as_SourceString.match(////*|-{2}|[';"%<>]+/)) return false;
else return true;
}
//——————————-驗證字符串長度是否符合要求—0-為空,1-為小於下限,2-為大於上限,3-符合要求—
function f_StringLenCheck(as_SourceString, low_Length, up_Length)
{
//字符串長度,單字節計1,雙字節計和漢字等計2
as_SourceString = as_SourceString.replace(/[^/x00-/xff]/g,"aa");
if(as_SourceString.length == 0) return 0;
else if(as_SourceString.length < low_Length) return 1;
else if(as_SourceString.length > up_Length) return 2;
else return 3;
}
//———————————————驗證是否全部是數字且不以0開頭—-合法:true—不合法:false———
function f_NumericCheck(as_SourceString)
{
return as_SourceString.match(/^[1-9]{1}/d*$/g);
}
//———————————————驗證是否全部是數字可以0開頭—-合法:true—不合法:false———
function f_NumericCheckAll(as_SourceString)
{
return as_SourceString.match(/^[0-9]{1}/d*$/g);
}
//———————————————驗證是否為標準的電話號碼—-合法:true—不合法:false———
function f_MobilCheck(as_SourceString)
{
if(as_SourceString.match(/^13[0-9]{9}$/g)) return true; //手機號為13開頭的11位數字
else if(as_SourceString.match(/^[0]{1}[0-9]{2,3}[2-8]{1}[0-9]{5,7}$/g)) return true; //小靈通為0開頭的3-4位的區號+不以1和9開頭的6-8位數字
return false;
}
//———————————————驗證是否為標準的身份證號碼—-合法:true—不合法:false———
function f_IDCardCheck(as_SourceString)
{
return as_SourceString.match(/^[0-9]{6}[1-2]{1}[0-9]{3}[0-1]{1}[0-9]{1}[0-3]{1}[0-9]{1}[0-9]{3}[xX0-9]{1}$/g);
}
//———————————————-驗證短日期格式—————————————————-
function f_DateShortCheck(as_SourceString)//2000-1-1或2000-01-01
{
return as_SourceString.match(/^([1-2]{1})([0-9]{3})-(0?[1-9]|10|11|12)-(0?[1-9]|[1-2][0-9]|30|31)$/g);
}
//——————————————-比較兩控件值是否相等————————————
function f_CompareControl(Contorl1,Contorl2)
{
if(document.getElementById(Contorl1).value==document.getElementById(Contorl2).value) return true;
else return false;
}
//————————————————顯示第一個圖標,隱藏第二個圖標——————
function f_DisplayImage(Image_DispID, Image_NoneID)
{
if(document.getElementById(Image_DispID)) document.getElementById(Image_DispID).style.display="inline";
if(document.getElementById(Image_NoneID)) document.getElementById(Image_NoneID).style.display="none";
}
//————————————————顯示提示文本,使用CSS-fontred字體顏色,Label_Name允許為空———–
function f_DisplayLabel(Label_ID, Label_String, Label_Name)
{
if(document.getElementById(Label_ID))
{
if(Label_String == "")
{
if(Label_Name != undefined){}
else document.getElementById(Label_ID).innerHTML="";
}
else
{
if(Label_Name != undefined)
{
Label_String = document.getElementById(Label_ID).innerHTML + "<font class='fenleidaohangfont'>" + Label_Name + ":</font>" + Label_String;
}
document.getElementById(Label_ID).innerHTML='<font class="fontred"> '+Label_String+'</font>';
}
}
}
//————————————————顯示出錯圖標和提示信息———–
function f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, Label_String, Label_Name)
{
f_DisplayImage(Image_ID_NG, Image_ID_OK);
f_DisplayLabel(Label_ID, Label_String, Label_Name);
f_SetFocus(TextBox_ID);
}
//————————————————定焦點———–
function f_SetFocus(Object_ID)
{
if(document.getElementById(Object_ID))
{
if(document.getElementById(Object_ID).isContentEditable) document.getElementById(Object_ID).focus();
if(document.getElementById(Object_ID).type == "text") document.getElementById(Object_ID).select();
}
}
//————————————————顯示正確圖標和隱藏提示信息———–
function f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
f_DisplayImage(Image_ID_OK, Image_ID_NG);
f_DisplayLabel(Label_ID, "", Label_Name);
}
//————————————————顯示正確圖標和提示為空信息———–
function f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
f_DisplayImage(Image_ID_OK, Image_ID_NG);
f_DisplayLabel(Label_ID, '提醒:<font class="fenleidaohangfont">這裡還空著呢!</font>', Label_Name);
}
//————————————————取得文本框的值—首先判斷頁面對象是否存在———–
function f_GetTextboxValue(TextBox_ID)
{
if(document.getElementById(TextBox_ID)) return document.getElementById(TextBox_ID).value;
else
{
alert ("系統調試中:程序所需對象 "+TextBox_ID+" 不存在。");
return "";
}
}
//————————————————文本框常用的判斷:判斷有無非法字符————————————————-
function f_TextBoxCheckLawless(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_GetTextboxValue(TextBox_ID);
if(f_StringCheck(as_SourceString)) return true;
else
{
as_SourceString = "不允許含有單引號、雙引號、分號、百分號、尖括號、雙減號、斜杠星號,請修改。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
return false;
}
//——————————————— –文本框常用的判斷:判斷長度——-
function f_TextBoxCheckLength(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_GetTextboxValue(TextBox_ID);
switch (f_StringLenCheck(as_SourceString, low_Length, up_Length))
{
case 0:
{
if(emp_Allow)
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
else
{
as_SourceString = "不能為空,請重新輸入。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
}
case 1:
{
as_SourceString = "至少需要有 "+low_Length+" 位,每個漢字計2位,請修改。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
case 2:
{
as_SourceString = "最多隻能有 "+up_Length+" 位,每個漢字計2位,請修改。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
}
return true;
}
//——————————————— –下拉選擇框常用的判斷:是否已選擇非空選項——-
function f_DropdownlistCheck(Dropdownlist_ID, emp_Allow, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_GetTextboxValue(Dropdownlist_ID);
if(as_SourceString == ""||as_SourceString == "請選擇")
{
if(emp_Allow)
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
return true;
}
else
{
as_SourceString = "不能為空,請重新選擇。";
f_DisplayMessage(Dropdownlist_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
}
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
return true;
}
//——————————————— –三個單選框判斷:是否已選擇其中一項——-
function f_RadioButton3Check(RadioButton_ID1,RadioButton_ID2,RadioButton_ID3, emp_Allow, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = "";
if(document.getElementById(RadioButton_ID1)&&document.getElementById(RadioButton_ID2)&&document.getElementById(RadioButton_ID3))
{
if(document.getElementById(RadioButton_ID1).checked||document.getElementById(RadioButton_ID2).checked||document.getElementById(RadioButton_ID3).checked)
{
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
}
else if(emp_Allow)
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
return true;
}
else
{
as_SourceString = "不能為空,請重新選擇。";
f_DisplayImage(Image_ID_NG, Image_ID_OK);
f_DisplayLabel(Label_ID, as_SourceString, Label_Name);
f_SetFocus(RadioButton_ID1);
return false;
}
}
return true;
}
//-
//—————–*****************———文本框驗證過程:常規結構————————————–最終結果提示。——–
//—過程入口
// {
//——獲得文本框的字符串,賦給:as_SourceString—-這時選擇去掉全部空格:f_PubStrTrimAll,還是首尾空格:f_PubStrTrim———-
//———–將去空格後的字符串賦回給文本框的value
//——判斷文本框是否允許為空:emp_Allow,並且:as_SourceString也是為空———————————————————
// {
//———–成立則顯示為空:f_DisplayEmpty,且返回通過驗證:true
// }
//——判斷文本框字符串的長度是否符合要求————————————————————————————–
// {
//———–如果長度正確,則判斷是否含有非法字符;有特殊字符判斷的,可跳過非法字符判斷,如:f_NumericCheck(as_SourceString)—-
// {
//—————–如果沒有非法字符,則開始附加的判斷;如果沒有附加判斷,則顯示通過:f_DisplayOK,且返回通過驗證:true———-
//———————–附加的判斷一般都要新增字符串入口的判斷,如:f_EmailCheck(as_SourceString)
// {
//———————–如果附加判斷通過,則顯示通過:f_DisplayOK,且返回通過驗證:true
// esle—-如果附加判斷不正確,則顯示錯誤信息(一般無通用表示),且返回不能通過:false
// }
//—————–不管非法字符判斷結果,強制返回不能通過:false(因為如果通過的話,前面有相應值返回)
// }
//———–不管長度判斷結果,強制返回不能通過:false(因為如果通過的話,前面有相應值返回)
// }
//——不管前面的判斷結果,強制返回不能通過:false(因為如果通過的話,前面有相應值返回)
// }
//—————*****************————–新增過程均應該是這種結構—————————————最終結果提示。——–
//
//————————-文本框驗證過程:常規驗證—-1-刪除左右空格,2-判斷長度,3-判斷有無非法字符。—-最終結果提示。——–
function f_TextBoxCheckTrim(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_PubStrTrim(f_GetTextboxValue(TextBox_ID));
if(document.getElementById(TextBox_ID)) document.getElementById(TextBox_ID).value = as_SourceString;
if(emp_Allow && as_SourceString == "")
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
if(f_TextBoxCheckLength(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name))
{
if(f_TextBoxCheckLawless(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name))
{
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
return false;
}
return false;
}
//————————-文本框驗證過程:嚴格驗證—-1-刪除全部空格(包括文本中的空格),2-判斷長度,3-判斷有無非法字符。—-最終結果提示。——–
function f_TextBoxCheckTrimAll(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_PubStrTrimAll(f_GetTextboxValue(TextBox_ID));
if(document.getElementById(TextBox_ID)) document.getElementById(TextBox_ID).value = as_SourceString;
if(emp_Allow && as_SourceString == "")
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
if(f_TextBoxCheckLength(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name))
{
if(f_TextBoxCheckLawless(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name))
{
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
return false;
}
return false;
}
//———————————-文本框驗證過程:電子郵箱—–首先刪除全部空格,全部轉成小寫字母———–最終結果提示。——-
function f_TextBoxCheckEmail(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_PubStrTrimAll(f_GetTextboxValue(TextBox_ID));
as_SourceString = as_SourceString.toLowerCase();
if(document.getElementById(TextBox_ID)) document.getElementById(TextBox_ID).value = as_SourceString;
if(emp_Allow && as_SourceString == "")
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
if(f_TextBoxCheckLength(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name))
{
if(f_EmailCheck(as_SourceString))
{
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
else
{
as_SourceString = "格式不對,請修改。舉例:name@126.com。即字母、數字、符號-_.@的組合,最後的.後隻能有字母。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
}
return false;
}
//————————————文本框驗證過程:純數字框,不允許0開頭——–首先刪除全部空格—————-最終結果提示。——-
function f_TextBoxCheckNumeric(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_PubStrTrimAll(f_GetTextboxValue(TextBox_ID));
if(document.getElementById(TextBox_ID)) document.getElementById(TextBox_ID).value = as_SourceString;
if(emp_Allow && as_SourceString == "")
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
if(f_TextBoxCheckLength(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name))
{
if(f_NumericCheck(as_SourceString))
{
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
else
{
as_SourceString = "隻能包含不以 0 開頭的阿拉伯數字,請修改。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
}
return false;
}
//————————————文本框驗證過程:純數字框,允許0開頭——–首先刪除全部空格—————-最終結果提示。——-
function f_TextBoxCheckNumericAll(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_PubStrTrimAll(f_GetTextboxValue(TextBox_ID));
if(document.getElementById(TextBox_ID)) document.getElementById(TextBox_ID).value = as_SourceString;
if(emp_Allow && as_SourceString == "")
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
if(f_TextBoxCheckLength(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name))
{
if(f_NumericCheckAll(as_SourceString))
{
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
else
{
as_SourceString = "隻能包含阿拉伯數字,請修改。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
}
return false;
}
//————————————文本框驗證過程: 密碼框——–隻需計算長度即可—————-最終結果提示。——-
function f_TextBoxCheckPsw(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_GetTextboxValue(TextBox_ID);
if(emp_Allow && as_SourceString == "")
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
if(f_TextBoxCheckLength(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name))
{
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
if(document.getElementById(TextBox_ID))
{
document.getElementById(TextBox_ID).value = "";//密碼框有錯時,在提示的同時,清除密碼框的內容。
f_SetFocus(TextBox_ID);
}
return false;
}
//———————————–文本框驗證過程: 驗證兩個密碼框的輸入值是否一致——————-最終結果提示。——-
function f_TextBoxCheckTwoPsw(emp_Allow, low_Length, up_Length, TextBox_ID1, Image_ID_OK1, Image_ID_NG1, Label_ID1, TextBox_ID2, Image_ID_OK2, Image_ID_NG2, Label_ID2, Label_Name1, Label_Name2)
{
var as_SourceString1 = f_GetTextboxValue(TextBox_ID1);
var as_SourceString2 = f_GetTextboxValue(TextBox_ID2);
if(emp_Allow && as_SourceString1 == "" && as_SourceString2 == "")
{
f_DisplayEmpty(Image_ID_OK1, Image_ID_NG1, Label_ID1, Label_Name1);
f_DisplayEmpty(Image_ID_OK2, Image_ID_NG2, Label_ID2, Label_Name2);
return true;
}
if(f_TextBoxCheckLength(TextBox_ID2, emp_Allow, low_Length, up_Length, Image_ID_OK2, Image_ID_NG2, Label_ID2, Label_Name2))
{
f_DisplayOK("Nothing", Image_ID_NG2, Label_ID2, Label_Name2);
if(f_TextBoxCheckLength(TextBox_ID1, emp_Allow, low_Length, up_Length, Image_ID_OK1, Image_ID_NG1, Label_ID1, Label_Name1))
{
f_DisplayOK("Nothing", Image_ID_NG1, Label_ID1, Label_Name1);
if(as_SourceString1 == as_SourceString2)
{
f_DisplayOK(Image_ID_OK1, Image_ID_NG1, Label_ID1, Label_Name1);
f_DisplayOK(Image_ID_OK2, Image_ID_NG2, Label_ID2, Label_Name2);
return true;
}
else
{
as_SourceString1 = "兩次輸入的密碼不一致,請重新輸入。";
f_DisplayMessage(TextBox_ID1, Image_ID_OK1, Image_ID_NG1, Label_ID1, as_SourceString1, Label_Name1);
f_DisplayMessage(TextBox_ID2, Image_ID_OK2, Image_ID_NG2, Label_ID2, as_SourceString1, Label_Name2);
}
}
}
else if(f_TextBoxCheckLength(TextBox_ID1, emp_Allow, low_Length, up_Length, Image_ID_OK1, Image_ID_NG1, Label_ID1, Label_Name1))
{
f_DisplayOK("Nothing", Image_ID_NG1, Label_ID1, Label_Name1);
}
if(document.getElementById(TextBox_ID2)) document.getElementById(TextBox_ID2).value = "";//密碼框有錯時,在提示的同時,清除密碼框的內容。
if(document.getElementById(TextBox_ID1))
{
document.getElementById(TextBox_ID1).value = "";//密碼框有錯時,在提示的同時,清除密碼框的內容。
f_SetFocus(TextBox_ID1);
}
return false;
}
//————————————文本框驗證過程:標準電話號碼框—–刪除前後空格,由數字組成,無符號————-最終結果提示。——-
function f_TextBoxCheckMobil(TextBox_ID, emp_Allow, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_PubStrTrimAll(f_GetTextboxValue(TextBox_ID));
if(document.getElementById(TextBox_ID)) document.getElementById(TextBox_ID).value = as_SourceString;
if(emp_Allow && as_SourceString == "")
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
if(f_MobilCheck(as_SourceString))
{
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
as_SourceString = "號碼有錯,請修改。手機不加0,小靈通加區號。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
//————————————文本框驗證過程:18位身份證號碼框—–刪除全部空格,由數字和最後一位字母組成——–最終結果提示。——-
function f_TextBoxCheckIDCard(TextBox_ID, emp_Allow, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_PubStrTrimAll(f_GetTextboxValue(TextBox_ID));
if(document.getElementById(TextBox_ID)) document.getElementById(TextBox_ID).value = as_SourceString;
if(emp_Allow && as_SourceString == "")
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
if(f_IDCardCheck(as_SourceString))
{
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
as_SourceString = "請輸入正確的、18位身份證號碼。<a href='#'>點擊:15位轉18位</a>";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
//———————————–文本框驗證過程:短日期—–刪除全部空格,2001-1-1或2001-01-01——–最終結果提示。——-
function f_TextBoxCheckDateShort(TextBox_ID, emp_Allow, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
var as_SourceString = f_GetTextboxValue(TextBox_ID);
if(emp_Allow && as_SourceString == "")
{
f_DisplayEmpty(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
else if(f_NumericCheck(as_SourceString))
{
if(document.getElementById(TextBox_ID))
{
if(as_SourceString.length == 8)
{
document.getElementById(TextBox_ID).value = as_SourceString.substr(0,4)+ "-" + as_SourceString.substr(4,2) + "-" + as_SourceString.substr(6,2);
as_SourceString = document.getElementById(TextBox_ID).value;
}
}
}
if(f_DateShortCheck(as_SourceString))
{
var dstring=as_SourceString.substr(0,4);
if(dstring<1900||dstring>2100)
{
as_SourceString = "年份應該在1900到2100年之間,請修改。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
dstring=as_SourceString.substr(5,as_SourceString.lastIndexOf("-")-5);
switch (eval(dstring))
{
case 4: case 6: case 9: case 11:
dstring=as_SourceString.substr(as_SourceString.lastIndexOf("-")+1);
if(dstring<1||dstring>30)
{
as_SourceString = "4,6,9,11月隻有30天,請修改。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
break;
case 2:
dstring=as_SourceString.substr(0,4);
if(dstring % 400 == 0 ||(dstring %100 != 0 && dstring % 4 == 0))
{
dstring=as_SourceString.substr(as_SourceString.lastIndexOf("-")+1);
if(dstring<1||dstring>29)
{
as_SourceString = "閏年的2月隻有29天,請修改。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
}
else
{
dstring=as_SourceString.substr(as_SourceString.lastIndexOf("-")+1);
if(dstring<1||dstring>28)
{
as_SourceString = "不是閏年的2月隻有28天,請修改。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
}
break;
}
f_DisplayOK(Image_ID_OK, Image_ID_NG, Label_ID, Label_Name);
return true;
}
as_SourceString = "格式不對,應為1988-1-31或1988-01-31,請修改。";
f_DisplayMessage(TextBox_ID, Image_ID_OK, Image_ID_NG, Label_ID, as_SourceString, Label_Name);
return false;
}
//—————————————實時過程:短日期框—–隻能輸入數字和-號————————————-
function f_ReplaceNotDateShort(TextBox_ID)
{
var as_SourceString = f_GetTextboxValue(TextBox_ID);
as_SourceString = as_SourceString.replace(/[^0-9-]/g,"");
if(document.getElementById(TextBox_ID))
{
if(as_SourceString.lastIndexOf("-") == 2) document.getElementById(TextBox_ID).value = "19"+as_SourceString;
else document.getElementById(TextBox_ID).value = as_SourceString;
}
}
//—————————————實時過程:數字框—–隻能輸入阿拉伯數字————————————-
function f_ReplaceNotNumeric(TextBox_ID)
{
if(document.getElementById(TextBox_ID)) document.getElementById(TextBox_ID).value = document.getElementById(TextBox_ID).value.replace(//D/g,"");
}
//—————————————實時過程:身份證框—–隻能輸入阿拉伯數字和x————————————-
function f_ReplaceNotIDNo(TextBox_ID)
{
if(document.getElementById(TextBox_ID)) document.getElementById(TextBox_ID).value = document.getElementById(TextBox_ID).value.replace(/[^0-9Xx]/g,"");
}
//————————————光標定位到文本框尾————————————————————————
function f_setCaretAtEnd(TextBox_ID)
{
if(document.getElementById(TextBox_ID) && document.getElementById(TextBox_ID).isContentEditable)
{
var tmpObj = document.getElementById(TextBox_ID);
if(tmpObj.createTextRange)
{
var r = tmpObj.createTextRange();
r.moveStart('character',tmpObj.value.length);
r.collapse();
r.select();
}
}
}
//—————————————-以下部分:地區選擇下拉框和地址全稱Label聯動的相關過程———————————
//——默認獲取xml文件的頁面放置在根目錄下:Menu.aspx
//——四個ID:tmpCountryID,tmpProvinceID,tmpCityID,tepCountyID需在具體窗體文件對應的js文件中使用var聲明=""。
//——四個DropDownList_ID默認是:"DropDownList_CountryID","DropDownList_ProvinceID","DropDownList_CityID","DropDownList_CountyID"。
//——地址全稱Label_ID默認是:"Label_AddressAll"。
//——地址細節門牌TextBox_ID默認是:"TextBox_Address"。
//——郵政編碼TextBox_ID默認是:TextBox_ZipCode。
//——生成xml的默認DBclass.WebService.Web.Service中的視圖和表名前綴為:DsUV_和UV_。
//——各地址ID和字段名與數據表中的原始字段名相同。
//——————————————-上一級下拉框改變促發下一級下拉框重新綁定———————————————————————-
function Load_DropDownList_ProvinceID(NextClassID)
{
Bind_DropDownList("DropDownList_ProvinceID",NextClassID,"ProvinceID","ProvinceName","DsUV_Provinces","UV_Provinces");
Load_Address("DropDownList_ProvinceID");
}
function Load_DropDownList_CityID(NextClassID)
{
Bind_DropDownList("DropDownList_CityID",NextClassID,"CityID","CityName","DsUV_Cities","UV_Cities");
Load_Address("DropDownList_CityID");
}
function Load_DropDownList_CountyID(NextClassID)
{
Bind_DropDownList("DropDownList_CountyID",NextClassID,"CountyID","LongName","DsUV_Counties","UV_Counties");
Load_Address("DropDownList_CountyID");
}
//————————————-從xml文件中獲取地區信息,重新綁定下拉框選項———————————————————-
function Bind_DropDownList(DropDownList_ID,NextClassID,OptionValue,OptionText,TableName,Table)
{
if(document.getElementById(DropDownList_ID))
{
var tmpDropDownList_ID = document.getElementById(DropDownList_ID);
RemoveAll(tmpDropDownList_ID);
if(NextClassID == "" || NextClassID == "請選擇"){}
else
{
var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
var oDoc = new ActiveXObject("MSXML2.DOMDocument");
oHttpReq.open("POST", "../Menu.aspx?ClassID="+NextClassID+"&TableName="+TableName, false);
oHttpReq.send("");
result = oHttpReq.responseText;
oDoc.loadXML(result);
itemsOptionText = oDoc.selectNodes("//"+TableName+"/"+Table+"/"+OptionText);
itemsOptionValue = oDoc.selectNodes("//"+TableName+"/"+Table+"/"+OptionValue);
var itemsLength = itemsOptionText.length;
for(i=0;i<itemsLength;i++)
{
var newOption = document.createElement("OPTION");
newOption.text=itemsOptionText[i].text;
newOption.value=itemsOptionValue[i].text;
tmpDropDownList_ID.options.add(newOption);
}
}
}
}
//————————————————–清空下拉框,並增加一個空白選項“請選擇”———————————————————-
function RemoveAll(DropDownList_ID)
{
var i = 0;
for(i = DropDownList_ID.length; i >= 0; i–)
{
DropDownList_ID.options.remove(i);
}
var newOption = document.createElement("OPTION");
newOption.text="請選擇";
newOption.value="";
DropDownList_ID.options.add(newOption);
}
//——————————————————-聯動修改地址全稱Label———————————————————-
function Load_Address(DropDownList_ID)
{
if(DropDownList_ID=="DropDownList_ProvinceID")
{
RemoveAll(document.getElementById("DropDownList_CityID"));
RemoveAll(document.getElementById("DropDownList_CountyID"));
if(document.getElementById("Label_AddressAll")) document.getElementById("Label_AddressAll").innerHTML = Load_AddressToString();
}
else if(DropDownList_ID=="DropDownList_CityID")
{
RemoveAll(document.getElementById("DropDownList_CountyID"));
if(document.getElementById("Label_AddressAll")) document.getElementById("Label_AddressAll").innerHTML = Load_AddressToString();
}
else if(DropDownList_ID=="DropDownList_CountyID")
{
if(document.getElementById("Label_AddressAll")) document.getElementById("Label_AddressAll").innerHTML = Load_AddressToString();
}
}
//——————————————————-獲得所屬地區的文本串———————————————————-
function Load_AddressToString()
{
var tmpAddress = "";
var tmpString = document.getElementById("DropDownList_CountryID").options[document.getElementById("DropDownList_CountryID").selectedIndex].innerHTML;
if(tmpString !="" && tmpString != "請選擇") tmpAddress = tmpAddress + tmpString;
tmpString = document.getElementById("DropDownList_ProvinceID").options[document.getElementById("DropDownList_ProvinceID").selectedIndex].innerHTML;
if(tmpString !="" && tmpString != "請選擇")
{
if(tmpString.indexOf("(") > 0) tmpString = tmpString.substr(0,tmpString.indexOf("("));
tmpAddress = tmpAddress + " " + tmpString;
}
tmpString = document.getElementById("DropDownList_CityID").options[document.getElementById("DropDownList_CityID").selectedIndex].innerHTML;
if(tmpString !="" && tmpString != "請選擇")
{
if(tmpString.indexOf("(") > 0) tmpString = tmpString.substr(0,tmpString.indexOf("("));
tmpAddress = tmpAddress + " " + tmpString;
}
tmpString = document.getElementById("DropDownList_CountyID").options[document.getElementById("DropDownList_CountyID").selectedIndex].innerHTML;
if(tmpString !="" && tmpString != "請選擇")
{
if(tmpString.indexOf("(") > 0) tmpString = tmpString.substr(0,tmpString.indexOf("("));
tmpAddress = tmpAddress + " " + tmpString;
}
if(document.getElementById("TextBox_Address")) tmpAddress = tmpAddress + " " + document.getElementById("TextBox_Address").value;
return tmpAddress;
}
//——————————————————-郵政編碼框有修改時顯示提示信息———————————————————-
function ZipCodeLostFocus()
{
if(document.getElementById("TextBox_ZipCode").value == "") document.getElementById("Label_ZipCode").innerHTML = " 輸入郵政編碼,可以選擇自動更改地址的省市區選項。";
else document.getElementById("Label_ZipCode").innerHTML = "<a href='javascript:ZipCodeChangeAddress()'>點擊這裡:系統根據郵編自動更改地址的省市區選項。</a>";
}
//——————————————————-根據郵編自動更改地址的省市區選項———————————————————-
function ZipCodeChangeAddress()
{
if (f_TextBoxCheckNumericAll("TextBox_ZipCode", false, 6, 6, "", "ImageZipCode_No", "Label_ZipCode"))
{
ZipCodeToTmpID(document.getElementById("TextBox_ZipCode").value);
document.getElementById("DropDownList_CountryID").value = tmpCountryID;
Bind_DropDownList("DropDownList_ProvinceID",tmpCountryID,"ProvinceID","ProvinceName","DsUV_Provinces","UV_Provinces");
document.getElementById("DropDownList_ProvinceID").value = tmpProvinceID;
Bind_DropDownList("DropDownList_CityID",tmpProvinceID,"CityID","CityName","DsUV_Cities","UV_Cities");
document.getElementById("DropDownList_CityID").value = tmpCityID;
Bind_DropDownList("DropDownList_CountyID",tmpCityID,"CountyID","LongName","DsUV_Counties","UV_Counties");
document.getElementById("DropDownList_CountyID").value = tepCountyID;
Load_Address("DropDownList_CountyID");
}
}
//——————————————————-按郵政編碼生成所屬地區代碼———————————————————-
function ZipCodeToTmpID(ZipCode)
{
if(ZipCode == "")
{
tmpCountryID = "CHN";
tmpProvinceID = "CHNGDS";
tmpCityID = "CHNGDSGZH";
tepCountyID = "CHNGDSGZHBAI";
}
else
{
var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
var oDoc = new ActiveXObject("MSXML2.DOMDocument");
oHttpReq.open("POST", "../Menu.aspx?ClassID="+ZipCode+"&TableName=DsUV_WEB_CountyZipCode", false);
oHttpReq.send("");
result = oHttpReq.responseText;
oDoc.loadXML(result);
itemsCountryID = oDoc.selectNodes("//DsUV_WEB_CountyZipCode/UV_WEB_CountyZipCode/CountryID");
itemsProvinceID = oDoc.selectNodes("//DsUV_WEB_CountyZipCode/UV_WEB_CountyZipCode/ProvinceID");
itemsCityID = oDoc.selectNodes("//DsUV_WEB_CountyZipCode/UV_WEB_CountyZipCode/CityID");
itemsCountyID = oDoc.selectNodes("//DsUV_WEB_CountyZipCode/UV_WEB_CountyZipCode/CountyID");
tmpCountryID = itemsCountryID[0].text;
tmpProvinceID = itemsProvinceID[0].text;
tmpCityID = itemsCityID[0].text;
tepCountyID = itemsCountyID[0].text;
}
}
//——————————————————-按所屬地區代碼生成郵政編碼———————————————————-
function ZipCodeVsCountyID(ZipCode,CountyID)
{
if(CountyID == "" || ZipCode == "000000") return true;
else
{
var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
var oDoc = new ActiveXObject("MSXML2.DOMDocument");
oHttpReq.open("POST", "../Menu.aspx?ClassID="+ZipCode+"&TableName=DsUV_WEB_CountyZipCode", false);
oHttpReq.send("");
result = oHttpReq.responseText;
oDoc.loadXML(result);
itemsCountyID = oDoc.selectNodes("//DsUV_WEB_CountyZipCode/UV_WEB_CountyZipCode/CountyID");
var itemsLength = itemsCountyID.length;
for(i=0;i<itemsLength;i++)
{
if(itemsCountyID[i].text == CountyID) return true;
}
return false;
}
}
//——————————————————-判斷郵政編碼過程———————————————————-
function f_TextBoxCheckZipCode(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name)
{
if (f_TextBoxCheckNumericAll(TextBox_ID, emp_Allow, low_Length, up_Length, Image_ID_OK, Image_ID_NG, Label_ID, Label_Name))
{
if(ZipCodeVsCountyID(document.getElementById(TextBox_ID).value, document.getElementById("DropDownList_CountyID").value)) return true;
else
{
f_DisplayMessage("DropDownList_CountryID", "ImageCountryID_Yes", "ImageCountryID_No", "Label_countryList", "郵編與所屬地區不一致,有可能導致包裹投遞延誤。");
if(confirm("您輸入的 郵政編碼 與所選的 所屬地區 不一致,這有可能導致包裹投遞延誤。/n/n 中國大陸以外地區、無郵政編碼的請輸入6個0。/n/n按 “確定” 進行修改,按 “取消” 忽略此情況。"))
{
ZipCodeLostFocus();
return false;
}
return true;
}
}
f_DisplayMessage("DropDownList_CountryID", "ImageCountryID_Yes", "ImageCountryID_No", "Label_countryList", "中國大陸以外地區、無郵政編碼的請輸入6個0。");
return false;
}
//—————————————-以上部分:地區選擇下拉框和地址全稱Label聯動的相關過程———————————
textbox 要換行,要先設Multiline為true才可以換行,用/r/n換行
在textbox中自動加上 style="overflow-y:hidden" 或者寫入代碼: TextBoxID.Attributes.Add("style", "overflow-y:hidden")
<script type="text/javascript">
function check(){
var recheck = /^/d+(,/d+)*$/; //判斷格式是否為:1,2,3,4,5,6,7,8,9 每個數字長度不限var re = /^[1-7](,[1-7])*$/;
if(!document.form1.product_conn.value.match(recheck)){
document.form1.product_conn.value="";return false;
}
}
</script>
Regex reg=new Regex("(?<=<TD[^>]*>)(?:(?! )[^<])+");
string result=string.Empty;
foreach(Match m in reg.Matchs("你的字符串"))
{
result+=m.Value+"/r/n";
}
以下是電話匹配,
function yz(v){
var a = /^((/(/d{3}/))|(/d{3}/-))?(/(0/d{2,3}/)|0/d{2,3}-)?[1-9]/d{6,7}$/;
/^((/(/d{3}/))|(/d{3}/-))?(/(0/d{2,3}/)|0/d{2,3}-)?[1-9]/d{6,7}$/;
/^([0-9]/{4/}[ /-.][0-2][0-9][ /-.][0-3][0-9]/)
if(!v.match(a) ){
alert("不符合");
}else{
alert("符合");
}
}
<script type="text/javascript">
function check(){
var a = /^/d+(,/d+)*$/; //判斷格式是否為:1,2,3,4,5,6,7,8,9 每個數字長度不限var re = /^[1-7](,[1-7])*$/;
if(!document.form1.textfield.value.match(a)){
document.form1.textfield.value="";return false;
}
}
</script>
一、移動電話(任選其一):
(1/d{10}//(0/d{2,3}-/d{8}|0/d{3}-/d{7}))|(1/d{10}(//1/d{10})?)|(0/d{2,3}-/d{8}|0/d{3}-/d{7})
(1/d{10}//1/d{10})|(1/d{10}(//(0/d{2,3}-/d{8}|0/d{3}-/d{7}))?)|(0/d{2,3}-/d{8}|0/d{3}-/d{7})
二、固定電話:
(0/d{2,3}-/d{8}|0/d{3}-/d{7})(-/d{1,6})?(//(0/d{2,3}-/d{8}|0/d{3}-/d{7})(-/d{1,6})?)?
var a = /^/d{6}$/; 此為郵政編碼驗證
var a = /13[0-9]{9}|15[0-9]{9}/; 手機驗證
^((((1[6-9]|[2-9]/d)/d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]/d|3[01]))|(((1[6-9]|[2-9]/d)/d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]/d|30))|(((1[6-9]|[2-9]/d)/d{2})-0?2-(0?[1-9]|1/d|2[0-8]))|(((1[6-9]|[2-9]/d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$
<p>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1"
ErrorMessage="請輸入11位手機號碼" ValidationExpression="^1(3|5)/d{9}$"></asp:RegularExpressionValidator>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ControlToValidate="TextBox2"
ErrorMessage="郵編為6位數字" ValidationExpression="^/d{6}$"></asp:RegularExpressionValidator>
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator3" runat="server" ControlToValidate="TextBox3"
ErrorMessage="正確格式020-XXXXXXXX" ValidationExpression="^(([0/+]/d{2,3}-)?(0/d{2,3})-)?(/d{7,8})(-(/d{3,}))?$"></asp:RegularExpressionValidator>
<asp:Button ID="sub_button" Text="設置" OnCommand="LantouAction" runat="server" CommandName="LantouAction" />
</p>
中國電話號碼驗證 非法字符: ^(?:[/u4e00-/u9fa5]*/w*/s*)+$
匹配形式如:0511-4405222 或者021-87888822 或者 021-44055520-555 或者 (0511)4405222
正則表達式 "((d{3,4})|d{3,4}-)?d{7,8}(-d{3})*"
中國郵政編碼驗證 ^1(?:3|5)/d{9}$
匹配形式如:215421
正則表達式 "d{6}"
電子郵件驗證
匹配形式如:justali@justdn.com
正則表達式 "w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*"
身份證驗證
匹配形式如:15位或者18位身份證
正則表達式 "d{18}|d{15}"
常用數字驗證
正則表達式
"d{n}" n為規定長度
"d{n,m}" n到m的長度范圍
非法字符驗證
匹配非法字符如:< > & / ' |
正則表達式 [^<>&/|'/]+
input.value.search(/["'"]/)!=-1)
var areg = //W/;
if (areg.test(str))
{
alert("含有非法字符,請重新輸入。");
return;
}
ValidationExpression="^((?!,).)*$" 不含,號的正則
日期驗證
匹配形式如:20030718,030718
范圍:1900–2099
正則表達式((((19){1}|(20){1})d{2})|d{2})[01]{1}d{1}[0-3]{1}d{1}
正則表達式是一個好東西,但是一般情況下,我們需要驗證的內容少之又少。下面是常用的17種正則表達式:
"^/d+$" //非負整數(正整數 + 0)
"^[0-9]*[1-9][0-9]*$" //正整數
"^((-/d+)|(0+))$" //非正整數(負整數 + 0)
"^-[0-9]*[1-9][0-9]*$" //負整數
"^-?/d+$" //整數
"^/d+(/./d+)?$" //非負浮點數(正浮點數 + 0)
"^(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數
"^((-/d+(/./d+)?)|(0+(/.0+)?))$" //非正浮點數(負浮點數 + 0)
"^(-(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負浮點數
"^(-?/d+)(/./d+)?$" //浮點數
"^[A-Za-z]+$" //由26個英文字母組成的字符串
"^[A-Z]+$" //由26個英文字母的大寫組成的字符串
"^[a-z]+$" //由26個英文字母的小寫組成的字符串
"^[A-Za-z0-9]+$" //由數字和26個英文字母組成的字符串
"^/w+$" //由數字、26個英文字母或者下劃線組成的字符串
"^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$" //email地址
"^[a-zA-z]+://(/w+(-/w+)*)(/.(/w+(-/w+)*))*(/?/S*)?$" //url
[code]電子郵件 : @"^/w+((-/w+)|(/./w+))*/@/w+((/.|-)/w+)*/./w+$"
HTTP URL : @"^[url]http://([/url][/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?";
郵編 : @"/d{6}"
身份證 : @"/d{18}|/d{15}"
整數 : @"^/d{1,}$"
數值 : @"^-?(0|/d+)(/./d+)?$"
日期 : @"^(?:(?:(?:(?:1[6-9]|[2-9]/d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(//|-|/.)(?:0?2/1(?:29))$)|(?:(?:1[6-9]|[2-9]/d)?/d{2})(//|-|/.)(?:(?:(?:0?[13578]|1[02])/2(?:31))|(?:(?:0?[1,3-9]|1[0-2])/2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))/2(?:0?[1-9]|1/d|2[0-8]))$"
合法的用戶名(以字母開頭,長度不小於4) : @"(([a-zA-Z]){1})+(/w{3,29})"[/code]
<="">[code]常用正則表達式語法例句
這裡有一些可能會遇到的正則表達式示例:
/^/[ /t]*$/ "^/[ /t]*$" 匹配一個空白行。
//d{2}-/d{5}/ "/d{2}-/d{5}" 驗證一個ID號碼是否由一個2位字,一
個連字符以及一個5位數字組成。
/<(.*)>.*<///1>/ "<(.*)>.*<///1>" 匹配一個 HTML 標記。
下表是元字符及其在正則表達式上下文中的行為的一個完整列表:
字符 描述
/ 將下一個字符標記為一個特殊字符、或一個原義字符、或一個 後
向引用、或一個八進制轉義符。例如,'n' 匹配字符 "n"。'/n'
匹配一個換行符。序列 '//' 匹配 "/" 而 "/(" 則匹配 "("。
^ 匹配輸入字符串的開始位置。如果設置瞭 RegExp 對象的
Multiline 屬性,^ 也匹配 '/n' 或 '/r' 之後的位置。
$ 匹配輸入字符串的結束位置。如果設置瞭 RegExp 對象的
Multiline 屬性,$ 也匹配 '/n' 或 '/r' 之前的位置。
* 匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及
"zoo"。 * 等價於{0,}。
+ 匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "zo" 以
及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。
? 匹配前面的子表達式零次或一次。例如,"do(es)?" 可以匹配
"do" 或 "does" 中的"do" 。? 等價於 {0,1}。
{n} n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配
"Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
{n,} n 是一個非負整數。至少匹配n 次。例如,'o{2,}' 不能匹配
"Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}'
等價於 'o+'。'o{0,}' 則等價於 'o*'。
{n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹
配 m 次。劉, "o{1,3}" 將匹配 "fooooood" 中的前三個o。
'o{0,1}'等價於'o?'。請註意在逗號和兩個數之間不能有空格
? 當該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,},
{n,m}) 後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的
匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜
索的字符串。例如,對於字符串 "oooo",'o+?' 將匹配單個
"o",而 'o+' 將匹配所有 'o'。
. 匹配除 "/n" 之外的任何單個字符。要匹配包括 '/n' 在內的任
何字符,請使用象 '[./n]' 的模式。
(pattern) 匹配pattern 並獲取這一匹配。所獲取的匹配可以從產生的
Matches 集合得到,在VBScript 中使用 SubMatches 集合,在
Visual Basic Scripting Edition 中則使用 $0…$9 屬性。要
匹配圓括號字符,請使用 '/(' 或 '/)'。
(?:pattern) 匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹
配,不進行存儲供以後使用。這在使用 "或" 字符 (|) 來組合
一個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就
是一個比 'industry|industries' 更簡略的表達式。
(?=pattern) 正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符
串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後
使用。例如,'Windows (?=95|98|NT|2000)' 能匹配"Windows
2000"中的"Windows",但不能匹配"Windows3 .1"中"Windows"。
預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹
配之後立即開始下一次匹配的搜索,而不是從包含預查的字符之
後開始。
(?!pattern) 負向預查,在任何不匹配Negative lookahead matches the
search string at any point where a string not matching
pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹
配,也就是說,該匹配不需要獲取供以後使用。例如'Windows
(?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",
但不能匹配 "Windows 2000" 中的 "Windows"。預查不消耗字
符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開
始下一次匹配的搜索,而不是從包含預查的字符之後開始
x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)
ood' 則匹配 "zood" 或 "food"。
[xyz] 字符集合。匹配所包含的任意一個字符。例如, '[abc]' 可以
匹配 "plain" 中的 'a'。
[^xyz] 負值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以
匹配 "plain" 中的'p'。
[a-z] 字符范圍。匹配指定范圍內的任意字符。例如,'[a-z]' 可以匹
配 'a' 到 'z' 范圍內的任意小寫字母字符。
[^a-z] 負值字符范圍。匹配任何不在指定范圍內的任意字符。例如,
'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內的任意字符。
/b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如,
'er/b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中
的 'er'。
/B 匹配非單詞邊界。'er/B' 能匹配 "verb" 中的 'er',但不能匹
配 "never" 中的 'er'。
/cx 匹配由x指明的控制字符。例如, /cM 匹配一個 Control-M 或
回車符。 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一
個原義的 'c' 字符。
/d 匹配一個數字字符。等價於 [0-9]。
/D 匹配一個非數字字符。等價於 [^0-9]。
/f 匹配一個換頁符。等價於 /x0c 和 /cL。
/n 匹配一個換行符。等價於 /x0a 和 /cJ。
/r 匹配一個回車符。等價於 /x0d 和 /cM。
/s 匹配任何空白字符,包括空格、制表符、換頁符等等。等價於
[ /f/n/r/t/v]。
/S 匹配任何非空白字符。等價於 [^ /f/n/r/t/v]。
/t 匹配一個制表符。等價於 /x09 和 /cI。
/v 匹配一個垂直制表符。等價於 /x0b 和 /cK。
/w 匹配包括下劃線的任何單詞字符。等價於'[A-Za-z0-9_]'。
/W 匹配任何非單詞字符。等價於 '[^A-Za-z0-9_]'。
/xn 匹配 n,其中 n 為十六進制轉義值。十六進制轉義值必須為確
定的兩個數字長。例如, '/x41' 匹配 "A"。'/x041' 則等價
於 '/x04' & "1"。正則表達式中可以使用 ASCII 編碼。.
/num 匹配 num,其中num是一個正整數。對所獲取的匹配的引用。
例如,'(.)/1' 匹配兩個連續的相同字符。
/n 標識一個八進制轉義值或一個後向引用。如果 /n 之前至少 n
個獲取的子表達式,則 n 為後向引用。否則,如果 n 為八進制
數字 (0-7),則 n 為一個八進制轉義值。
/nm 標識一個八進制轉義值或一個後向引用。如果 /nm 之前至少有
is preceded by at least nm 個獲取得子表達式,則 nm 為後
向引用。如果 /nm 之前至少有 n 個獲取,則 n 為一個後跟文
字 m 的後向引用。如果前面的條件都不滿足,若 n 和 m 均為
八進制數字 (0-7),則 /nm 將匹配八進制轉義值 nm。
/nml 如果 n 為八進制數字 (0-3),且 m 和 l 均為八進制數字 (0-
7),則匹配八進制轉義值 nml。
/un 匹配 n,其中 n 是一個用四個十六進制數字表示的Unicode字
符。例如, /u00A9 匹配版權符號 (?)。 [/code]
常用正則表達式
——————————————————————————–
匹配html的嵌入代碼 [code]<[^>]*>[/code]
匹配[….]的嵌入碼[code] /[[^]]/{1,/}/][/code]
刪除僅由空字符組成的行
[code]sed '/^[[:space:]]*$/d' filename[/code]
匹配html標簽
[code]//(<[^>]*>/)/[/code]例如:從html文件中剔除html標簽
[code]sed 's//(<[^>]*>/)//g;/^[[:space:]]*$/d' file.html[/code]
例如:要從下列代碼中去除"[]"及其中包括的代碼
[code][b][color=red]一. 替換[/color][/b]
sed 's//[[^]]/{1,/}/]//g' filename[/code]
[b]匹配日期:[/b]
[code]Month, Day, Year [A-Z][a-z]/{3,9/}, [0-9]/{1,2/}, [0-9]/{4/}
2003-01-28 或 2003.10.18 或 2003/10/10 或 2003 10 10
/([0-9]/{4/}[ /-.][0-2][0-9][ /-.][0-3][0-9]/)[/code]
[b]匹配IP地址[/b]
[code]/([0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/)
/(/([0-9]/{1,3/}/./)/{3/}[0-9]/{1,3/}/)[/code]
[b]匹配數字串[/b]
[code][-+]*[0-9]/{1,/} 整數
[-+]*[0-9]/{1,/}/.[0-9]/{1,/} 浮點數[/code]
[b]從字串中解析出兩個子串(前2各字符和後9個字符) [/b]
[code]echo "WeLoveChinaUnix"|sed -e 'H;s//(../).*//1/;x;s/.*/(./{9/}/)$//1/;x;G;s//n/ /'
We ChinaUnix [/code]
[b]分解日期串[/b]
[code]echo 20030922|sed 's//(…./)/(../)/(../)//1 /2 /3/'|read year month day
echo $year $month $day [/code]
[b]文件內容倒序輸出[/b]
[code]sed '1!G;h;$!d' oldfile >newfile[/code]
[code]匹配中文字符的正則表達式:
[/u4e00-/u9fa5]
匹配雙字節字符(包括漢字在內):
[^/x00-/xff]
匹配空行的正則表達式:
/n[/s| ]*/r
匹配HTML標記的正則表達式:
/<(.*)>.*<///1>|<(.*) //>/
匹配首尾空格的正則表達式:
(^/s*)|(/s*$)
URL:
[url]http://([/url][/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?
Email:
/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*
中華人民共和國電話號碼
(/(/d{3}/)|/d{3}-)?/d{8}
中華人民共和國郵編
/d{6}
門丁註冊的id格式:2-12位,數字、字符、下劃線(0-9,a-z,A-Z,_)
^[0-9a-zA-Z]+(/w){1,11}[/code]
[color=red]藍吧甜 寶寶:[/color][color=blue]主人,陪我去森林裡玩好不好?
你和寶寶在森林裡找瞭個好東西給你~~管理員作的特別科研卡!
卡片說明:獲得社區特別科研基金100個金幣。
卡片效果:得到100金幣。
你高興我也高興![/color]
[img]/wp-content/images1/20180918/2334.jpg[/img]
[code]匹配中文字符的正則表達式: [/u4e00-/u9fa5]
匹配雙字節字符(包括漢字在內):[^/x00-/xff]
匹配空行的正則表達式:/n[/s| ]*/r
匹配HTML標記的正則表達式:/<(.*)>.*<///1>|<(.*) //>/
匹配首尾空格的正則表達式:(^/s*)|(/s*$)(像vbscript那樣的trim函數)
匹配Email地址的正則表達式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*
匹配網址URL的正則表達式:[url]http://([/url][/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?
—————————————————————————
以下是例子:
利用正則表達式限制網頁表單裡的文本框輸入內容:
用正則表達式限制隻能輸入中文:onkeyup="value=value.replace(/[^/u4E00-/u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/u4E00-/u9FA5]/g,''))"
1.用正則表達式限制隻能輸入全角字符: ')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/uFF00-/uFFFF]/g,''))"
2.用正則表達式限制隻能輸入數字:onkeyup="value=value.replace(/[^/d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"
3.用正則表達式限制隻能輸入數字和英文:onkeyup="value=value.replace(/[/W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"
4.計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)
String.prototype.len=function(){return this.replace([^/x00-/xff]/g,"aa").length;}
5.javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實現,如下:
String.prototype.trim = function()
{
return this.replace(/(^/s*)|(/s*$)/g, "");
}
利用正則表達式分解和轉換IP地址:
6.下面是利用正則表達式匹配IP地址,並將IP地址轉換成對應數值的Javascript程序:
function IP2V(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("不是一個正確的IP地址!")
}
}
不過上面的程序如果不用正則表達式,而直接用split函數來分解可能更簡單,程序如下:
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))[/code]
經典正則表達式(ZT) by lemon
關鍵詞: 正則表達式 by lemon posted at oioj on 2005-12-17 17:32:01 Weather: 晴 正則表達式用於字符串處理,表單驗證等場合,實用高效,但用到時總是不太把握,以致往往要上網查一番。我將一些常用的表達式收藏在這裡,作備忘之用。本貼隨時會更新。匹配中文字符的正則表達式: [/u4e00-/u9fa5]匹配雙字節字符(包括漢字在內):[^/x00-/xff]應用:計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)String.prototype.len=function(){return this.replace([^/x00-/xff]/g,"aa").length;}匹配空行的正則表達式:/n[/s| ]*/r匹配HTML標記的正則表達式:/<(.*)>.*<///1>|<(.*) //>/ 匹配首尾空格的正則表達式:(^/s*)|(/s*$)應用:javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實現,如下:String.prototype.trim = function()
{
return this.replace(/(^/s*)|(/s*$)/g, "");
}利用正則表達式分解和轉換IP地址:下面是利用正則表達式匹配IP地址,並將IP地址轉換成對應數值的Javascript程序:function IP2V(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!")
}
}不過上面的程序如果不用正則表達式,而直接用split函數來分解可能更簡單,程序如下:var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))匹配Email地址的正則表達式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*匹配網址URL的正則表達式:http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?利用正則表達式去除字串中重復的字符的算法程序:[註:此程序不正確,原因見本貼回復]var s="abacabefgeeii"
var s1=s.replace(/(.).*/1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //結果為:abcefgi我原來在CSDN上發貼尋求一個表達式來實現去除重復字符的方法,最終沒有找到,這是我能想到的最簡單的實現方法。思路是使用後向引用取出包括重復的字符,再以重復的字符建立第二個表達式,取到不重復的字符,兩者串連。這個方法對於字符順序有要求的字符串可能不適用。得用正則表達式從URL地址中提取文件名的javascript程序,如下結果為page1s="http://www.9499.net/page1.htm"
s=s.replace(/(.*//){0,}([^/.]+).*/ig,"$2")
alert(s)利用正則表達式限制網頁表單裡的文本框輸入內容:用正則表達式限制隻能輸入中文:onkeyup="value=value.replace(/[^/u4E00-/u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/u4E00-/u9FA5]/g,''))"用正則表達式限制隻能輸入全角字符: ')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/uFF00-/uFFFF]/g,''))"用正則表達式限制隻能輸入數字:onkeyup="value=value.replace(/[^/d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"用正則表達式限制隻能輸入數字和英文:onkeyup="value=value.replace(/[/W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"
正則表達式,相關鏈接
http://blog.csdn.net/laily/category/19548.aspx
http://blog.csdn.net/laily/archive/2004/06/30/30525.aspx 微軟的正則表達式教程(五):選擇/編組和後向引用 http://blog.csdn.net/laily/archive/2004/06/30/30522.aspx 微軟的正則表達式教程(四):限定符和定位符 http://blog.csdn.net/laily/archive/2004/06/30/30517.aspx 微軟的正則表達式教程(三):字符匹配 http://blog.csdn.net/laily/archive/2004/06/30/30514.aspx 微軟的正則表達式教程(二):正則表達式語法和優先權順序 http://blog.csdn.net/laily/archive/2004/06/30/30511.aspx 微軟的正則表達式教程(一):正則表達式簡介 http://blog.csdn.net/laily/archive/2004/06/30/30360.aspx 小程序大作為:高級查找/替換、正則表達式練習器、Javascript腳本程序調試器 http://blog.csdn.net/laily/archive/2004/06/24/25872.aspx 經典正則表達式 正則表達式,正規表達式,正則表達式匹配,正則表達式語法,模式匹配,正規表達式匹配 javascript正則表達式 ASP正則表達式 ASP.NET正則表達式 C#正則表達式 JSP正則表達式 PHP正則表達式 VB.NET正則表達式 VBSCript正則表達式編程 delphi正則表達式 jscript
補充:
^/d+$ //匹配非負整數(正整數 + 0)
^[0-9]*[1-9][0-9]*$ //匹配正整數
^((-/d+)|(0+))$ //匹配非正整數(負整數 + 0)
^-[0-9]*[1-9][0-9]*$ //匹配負整數
^-?/d+$ //匹配整數
^/d+(/./d+)?$ //匹配非負浮點數(正浮點數 + 0)
^(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*))$ //匹配正浮點數
^((-/d+(/./d+)?)|(0+(/.0+)?))$ //匹配非正浮點數(負浮點數 + 0)
^(-(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*)))$ //匹配負浮點數
^(-?/d+)(/./d+)?$ //匹配浮點數
^[A-Za-z]+$ //匹配由26個英文字母組成的字符串
^[A-Z]+$ //匹配由26個英文字母的大寫組成的字符串
^[a-z]+$ //匹配由26個英文字母的小寫組成的字符串
^[A-Za-z0-9]+$ //匹配由數字和26個英文字母組成的字符串
^/w+$ //匹配由數字、26個英文字母或者下劃線組成的字符串
^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$ //匹配email地址
^[a-zA-z]+://匹配(/w+(-/w+)*)(/.(/w+(-/w+)*))*(/?/S*)?$ //匹配url 利用正則表達式去除字串中重復的字符的算法程序: var s="abacabefgeeii"
var s1=s.replace(/(.).*/1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //結果為:abcefgi
===============================
如果var s = "abacabefggeeii"
結果就不對瞭,結果為:abeicfgg
正則表達式的能力有限 1.確認有效電子郵件格式
下面的代碼示例使用靜態 Regex.IsMatch 方法驗證一個字符串是否為有效電子郵件格式。如果字符串包含一個有效的電子郵件地址,則 IsValidEmail 方法返回 true,否則返回 false,但不采取其他任何操作。您可以使用 IsValidEmail,在應用程序將地址存儲在數據庫中或顯示在 ASP.NET 頁中之前,篩選出包含無效字符的電子郵件地址。 [Visual Basic]
Function IsValidEmail(strIn As String) As Boolean
' Return true if strIn is in valid e-mail format.
Return Regex.IsMatch(strIn, ("^([/w-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)|(([/w-]+/.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(/]?)$")
End Function
[C#]
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([/w-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)|(([/w-]+/.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(/]?)$");
}
2.清理輸入字符串
下面的代碼示例使用靜態 Regex.Replace 方法從字符串中抽出無效字符。您可以使用這裡定義的 CleanInput 方法,清除掉在接受用戶輸入的窗體的文本字段中輸入的可能有害的字符。CleanInput 在清除掉除 @、-(連字符)和 .(句點)以外的所有非字母數字字符後返回一個字符串。 [Visual Basic]
Function CleanInput(strIn As String) As String
' Replace invalid characters with empty strings.
Return Regex.Replace(strIn, "[^/w/.@-]", "")
End Function
[C#]
String CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
return Regex.Replace(strIn, @"[^/w/.@-]", "");
}
3.更改日期格式
以下代碼示例使用 Regex.Replace 方法來用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。 [Visual Basic]
Function MDYToDMY(input As String) As String
Return Regex.Replace(input, _
"/b(?/d{1,2})/(?/d{1,2})/(?/d{2,4})/b", _
"${day}-${month}-${year}")
End Function
[C#]
String MDYToDMY(String input)
{
return Regex.Replace(input,
"//b(?//d{1,2})/(?//d{1,2})/(?//d{2,4})//b",
"${day}-${month}-${year}");
}
Regex 替換模式
本示例說明如何在 Regex.Replace 的替換模式中使用命名的反向引用。其中,替換表達式 ${day} 插入由 (?…) 組捕獲的子字符串。 有幾種靜態函數使您可以在使用正則表達式操作時無需創建顯式正則表達式對象,而 Regex.Replace 函數正是其中之一。如果您不想保留編譯的正則表達式,這將給您帶來方便
4.提取 URL 信息
以下代碼示例使用 Match.Result 來從 URL 提取協議和端口號。例如,“http://www.contoso.com:8080/letters/readme.html”將返回“http:8080”。 [Visual Basic]
Function Extension(url As String) As String
Dim r As New Regex("^(?/w+)://[^/]+?(?:/d+)?/", _
RegexOptions.Compiled)
Return r.Match(url).Result("${proto}${port}")
End Function
[C#]
String Extension(String url)
{
Regex r = new Regex(@"^(?/w+)://[^/]+?(?:/d+)?/",
RegexOptions.Compiled);
return r.Match(url).Result("${proto}${port}");
}
by lemon posted on 2005-12-17 17:32:51
常用的匹配正則表達式和實例: http://www.blueidea.com/tech/program/2004/2273.asp
正則表達式使用詳解[轉]
關鍵詞: 正則表達式 作者:呂曉波
如果我們問那些UNIX系統的愛好者他們最喜歡什麼,答案除瞭穩定的系統和可以遠程啟動之外,十有八九的人會提到正則表達式;如果我們再問他們最頭痛的是什麼,可能除瞭復雜的進程控制和安裝過程之外,還會是正則表達式。那麼正則表達式到底是什麼?如何才能真正的掌握正則表達式並正確的加以靈活運用?本文將就此展開介紹,希望能夠對那些渴望瞭解和掌握正則表達式的讀者有所助益。
入門簡介
簡單的說,正則表達式是一種可以用於模式匹配和替換的強有力的工具。我們可以在幾乎所有的基於UNIX系統的工具中找到正則表達式的身影,例如,vi編輯器,Perl或PHP腳本語言,以及awk或sed shell程序等。此外,象JavaScript這種客戶端的腳本語言也提供瞭對正則表達式的支持。由此可見,正則表達式已經超出瞭某種語言或某個系統的局限,成為人們廣為接受的概念和功能。
正則表達式可以讓用戶通過使用一系列的特殊字符構建匹配模式,然後把匹配模式與數據文件、程序輸入以及WEB頁面的表單輸入等目標對象進行比較,根據比較對象中是否包含匹配模式,執行相應的程序。
舉例來說,正則表達式的一個最為普遍的應用就是用於驗證用戶在線輸入的郵件地址的格式是否正確。如果通過正則表達式驗證用戶郵件地址的格式正確,用戶所填寫的表單信息將會被正常處理;反之,如果用戶輸入的郵件地址與正則表達的模式不匹配,將會彈出提示信息,要求用戶重新輸入正確的郵件地址。由此可見正則表達式在WEB應用的邏輯判斷中具有舉足輕重的作用。
基本語法
在對正則表達式的功能和作用有瞭初步的瞭解之後,我們就來具體看一下正則表達式的語法格式。
正則表達式的形式一般如下:
/love/
其中位於“/”定界符之間的部分就是將要在目標對象中進行匹配的模式。用戶隻要把希望查找匹配對象的模式內容放入“/”定界符之間即可。為瞭能夠使用戶更加靈活的定制模式內容,正則表達式提供瞭專門的“元字符”。所謂元字符就是指那些在正則表達式中具有特殊意義的專用字符,可以用來規定其前導字符(即位於元字符前面的字符)在目標對象中的出現模式。
較為常用的元字符包括: “+”, “*”,以及 “?”。其中,“+”元字符規定其前導字符必須在目標對象中連續出現一次或多次,“*”元字符規定其前導字符必須在目標對象中出現零次或連續多次,而“?”元字符規定其前導對象必須在目標對象中連續出現零次或一次。
下面,就讓我們來看一下正則表達式元字符的具體應用。
/fo+/
因為上述正則表達式中包含“+”元字符,表示可以與目標對象中的 “fool”, “fo”, 或者 “football”等在字母f後面連續出現一個或多個字母o的字符串相匹配。
/eg*/
因為上述正則表達式中包含“*”元字符,表示可以與目標對象中的 “easy”, “ego”, 或者 “egg”等在字母e後面連續出現零個或多個字母g的字符串相匹配。
/Wil?/
因為上述正則表達式中包含“?”元字符,表示可以與目標對象中的 “Win”, 或者 “Wilson”,等在字母i後面連續出現零個或一個字母l的字符串相匹配。
除瞭元字符之外,用戶還可以精確指定模式在匹配對象中出現的頻率。例如,
/jim{2,6}/
上述正則表達式規定字符m可以在匹配對象中連續出現2-6次,因此,上述正則表達式可以同jimmy或jimmmmmy等字符串相匹配。
在對如何使用正則表達式有瞭初步瞭解之後,我們來看一下其它幾個重要的元字符的使用方式。
/s:用於匹配單個空格符,包括tab鍵和換行符;
/S:用於匹配除單個空格符之外的所有字符;
/d:用於匹配從0到9的數字;
/w:用於匹配字母,數字或下劃線字符;
/W:用於匹配所有與/w不匹配的字符;
. :用於匹配除換行符之外的所有字符。
(說明:我們可以把/s和/S以及/w和/W看作互為逆運算)
下面,我們就通過實例看一下如何在正則表達式中使用上述元字符。
//s+/
上述正則表達式可以用於匹配目標對象中的一個或多個空格字符。
//d000/
如果我們手中有一份復雜的財務報表,那麼我們可以通過上述正則表達式輕而易舉的查找到所有總額達千元的款項。
除瞭我們以上所介紹的元字符之外,正則表達式中還具有另外一種較為獨特的專用字符,即定位符。定位符用於規定匹配模式在目標對象中的出現位置。
較為常用的定位符包括: “^”, “$”, “/b” 以及 “/B”。其中,“^”定位符規定匹配模式必須出現在目標字符串的開頭,“$”定位符規定匹配模式必須出現在目標對象的結尾,/b定位符規定匹配模式必須出現在目標字符串的開頭或結尾的兩個邊界之一,而“/B”定位符則規定匹配對象必須位於目標字符串的開頭和結尾兩個邊界之內,即匹配對象既不能作為目標字符串的開頭,也不能作為目標字符串的結尾。同樣,我們也可以把“^”和“$”以及“/b”和“/B”看作是互為逆運算的兩組定位符。舉例來說:
/^hell/
因為上述正則表達式中包含“^”定位符,所以可以與目標對象中以 “hell”, “hello”或 “hellhound”開頭的字符串相匹配。
/ar$/
因為上述正則表達式中包含“$”定位符,所以可以與目標對象中以 “car”, “bar”或 “ar” 結尾的字符串相匹配。
//bbom/
因為上述正則表達式模式以“/b”定位符開頭,所以可以與目標對象中以 “bomb”, 或 “bom”開頭的字符串相匹配。
/man/b/
因為上述正則表達式模式以“/b”定位符結尾,所以可以與目標對象中以 “human”, “woman”或 “man”結尾的字符串相匹配。
為瞭能夠方便用戶更加靈活的設定匹配模式,正則表達式允許使用者在匹配模式中指定某一個范圍而不局限於具體的字符。例如:
/[A-Z]/
上述正則表達式將會與從A到Z范圍內任何一個大寫字母相匹配。
/[a-z]/
上述正則表達式將會與從a到z范圍內任何一個小寫字母相匹配。
/[0-9]/
上述正則表達式將會與從0到9范圍內任何一個數字相匹配。
/([a-z][A-Z][0-9])+/
上述正則表達式將會與任何由字母和數字組成的字符串,如 “aB0” 等相匹配。這裡需要提醒用戶註意的一點就是可以在正則表達式中使用 “()” 把字符串組合在一起。“()”符號包含的內容必須同時出現在目標對象中。因此,上述正則表達式將無法與諸如 “abc”等的字符串匹配,因為“abc”中的最後一個字符為字母而非數字。
如果我們希望在正則表達式中實現類似編程邏輯中的“或”運算,在多個不同的模式中任選一個進行匹配的話,可以使用管道符 “|”。例如:
/to|too|2/
上述正則表達式將會與目標對象中的 “to”, “too”, 或 “2” 相匹配。
正則表達式中還有一個較為常用的運算符,即否定符 “[^]”。與我們前文所介紹的定位符 “^” 不同,否定符 “[^]”規定目標對象中不能存在模式中所規定的字符串。例如:
/[^A-C]/
上述字符串將會與目標對象中除A,B,和C之外的任何字符相匹配。一般來說,當“^”出現在 “[]”內時就被視做否定運算符;而當“^”位於“[]”之外,或沒有“[]”時,則應當被視做定位符。
最後,當用戶需要在正則表達式的模式中加入元字符,並查找其匹配對象時,可以使用轉義符“/”。例如:
/Th/*/
上述正則表達式將會與目標對象中的“Th*”而非“The”等相匹配。
使用實例
在對正則表達式有瞭較為全面的瞭解之後,我們就來看一下如何在Perl,PHP,以及JavaScript中使用正則表達式。
通常,Perl中正則表達式的使用格式如下:
operator / regular-expression / string-to-replace / modifiers
運算符一項可以是m或s,分別代表匹配運算和替換運算。
其中,正則表達式一項是將要進行匹配或替換操作的模式,可以由任意字符,元字符,或定位符等組成。替換字符串一項是使用s運算符時,對查找到的模式匹配對象進行替換的字符串。最後的參數項用來控制不同的匹配或替換方式。例如:
s/geed/good/
將會在目標對象中查找第一個出現的geed字串,並將其替換為good。如果我們希望在目標對象的全局范圍內執行多次查找—替換操作的話,可以使用參數 “g”,即s/love/lust/g。
此外,如果我們不需要限制匹配的大小寫形式的話,可以使用參數 “i ”。例如,
m/JewEL/i
上述正則表達式將會與目標對象中的jewel,Jewel,或JEWEL相匹配。
在Perl中,使用專門的運算符“=~”指定正則表達式的匹配對象。例如:
$flag =~ s/abc/ABC/
上述正則表達式將會把變量$flag中的字串abc替換為ABC。
下面,我們就在Perl程序中加入正則表達式,驗證用戶郵件地址格式的有效性。代碼如下:
#!/usr/bin/perl
# get input
print “What/'s your email address?/n”;
$email = <STDIN>
chomp($email);
# match and display result
if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/)
{
print(“Your email address is correct!/n”);
}
else
{
print(“Please try again!/n”);
}
如果用戶更偏愛PHP的話,可以使用ereg()函數進行模式匹配操作。ereg()函數的使用格式如下:
ereg(pattern, string)
其中,pattern代表正則表達式的模式,而string則是執行查找替換操作的目標對象。同樣是驗證郵件地址,使用PHP編寫的程序代碼如下:
<?php
if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+”,$email))
{ echo “Your email address is correct!”;}
else
{ echo “Please try again!”;}
?>
最後,我們在來看一下JavaScript。JavaScript 1.2中帶有一個功能強大的RegExp()對象,可以用來進行正則表達式的匹配操作。其中的test()方法可以檢驗目標對象中是否包含匹配模式,並相應的返回true或false。
我們可以使用JavaScript編寫以下腳本,驗證用戶輸入的郵件地址的有效性。
<script language=/"Javascript1.2/">
<!– start hiding
function verifyAddress(obj)
{
var email = obj.email.value;
var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/;
flag = pattern.test(email);
if(flag)
{
alert(“Your email address is correct!”);
return true;
}
else
{
alert(“Please try again!”);
return false;
}
}
// stop hiding –>
<form onSubmit=/"return verifyAddress(this);/">
<input name=/"email/" type=/"text/">
<input type=/"submit/">
</form>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=544235
leek:匹配國內電話號碼:(/d{3}-|/d{4}-)?(/d{8}|/d{7})?
應該是 (0/d{2}-|0/d{3}-)?(/d{8}|/d{7})?
1.文本框隻能輸入數字代碼(小數點也不能輸入)
<input onkeyup="this.value=this.value.replace(//D/g,'')" onafterpaste="this.value=this.value.replace(//D/g,'')">
2.隻能輸入數字,能輸小數點.
<input onkeyup="if(isNaN(value))execCommand('undo')" onafterpaste="if(isNaN(value))execCommand('undo')">
<input name=txt1 onchange="if(//D/.test(this.value)){alert('隻能輸入數字');this.value='';}">
3.數字和小數點方法二
<input type=text tvalue="" ovalue="" onkeypress="if(!this.value.match(/^[/+/-]?/d*?/.?/d*?$/))this.value=this.t_value;else this.tvalue=this.value;if(this.value.match(/^(?:[/+/-]?/d+(?:/./d+)?)?$/))this.ovalue=this.value" onkeyup="if(!this.value.match(/^[/+/-]?/d*?/.?/d*?$/))this.value=this.t_value;else this.tvalue=this.value;if(this.value.match(/^(?:[/+/-]?/d+(?:/./d+)?)?$/))this.ovalue=this.value" onblur="if(!this.value.match(/^(?:[/+/-]?/d+(?:/./d+)?|/./d*?)?$/))this.value=this.o_value;else{if(this.value.match(/^/./d+$/))this.value=0+this.value;if(this.value.match(/^/.$/))this.value=0;this.ovalue=this.value}">
4.隻能輸入字母和漢字
<input onkeyup="value=value.replace(/[/d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[/d]/g,''))" maxlength=10 name="Numbers">
5.隻能輸入英文字母和數字,不能輸入中文
<input onkeyup="value=value.replace(/[^/w/.//]/ig,'')">
6.隻能輸入數字和英文<font color="Red">chun</font>
<input onKeyUp="value=value.replace(/[^/d|chun]/g,'')">
7.小數點後隻能有最多兩位(數字,中文都可輸入),不能輸入字母和運算符號:
<input onKeyPress="if((event.keyCode<48 || event.keyCode>57) && event.keyCode!=46 || //./d/d$/.test(value))event.returnValue=false">
8.小數點後隻能有最多兩位(數字,字母,中文都可輸入),可以輸入運算符號:
<input onkeyup="this.value=this.value.replace(/^(/-)*(/d+)/.(/d/d).*$/,'$1$2.$3')">
作者“ytm”