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 + "" + Label_Name + ": " + Label_String;
}
document.getElementById(Label_ID).innerHTML=' '+Label_String+' ';
}
}
}
//------------------------------------------------显示出错图标和提示信息-----------
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, '提醒:这里还空着呢! ', 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 = "格式不对,请修改。举例:[email protected] 。即字母、数字、符号-_.@的组合,最后的.后只能有字母。";
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位身份证号码。点击:15位转18位 ";
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= 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 = "点击这里:系统根据邮编自动更改地址的省市区选项。 ";
}
//-------------------------------------------------------根据邮编自动更改地址的省市区选项----------------------------------------------------------
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
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;
}
}
Regex reg=new Regex("(?<=]*>)(?:(?! )[^<])+");
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("符合");
}
}
一、移动电话(任选其一):
(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-))$
中国电话号码验证 非法字符: ^(?:[/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}"
电子邮件验证
匹配形式如:[email protected]
正则表达式 "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]http://www.xmsq.com/web/images/card/23.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- ./?%&=]*)?
---------------------------------------------------------------------------
以下是例子:
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:οnkeyup="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.用正则表达式限制只能输入数字:οnkeyup="value=value.replace(/[^/d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"
3.用正则表达式限制只能输入数字和英文:οnkeyup="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)利用正则表达式限制网页表单里的文本框输入内容:用正则表达式限制只能输入中文:οnkeyup="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,''))"用正则表达式限制只能输入数字:οnkeyup="value=value.replace(/[^/d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"用正则表达式限制只能输入数字和英文:οnkeyup="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 =
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编写的程序代码如下:
最后,我们在来看一下JavaScript。JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。
我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。
你可能感兴趣的:(Javascript)
Long类型前后端数据不一致
igotyback
前端
响应给前端的数据浏览器控制台中response中看到的Long类型的数据是正常的到前端数据不一致前后端数据类型不匹配是一个常见问题,尤其是当后端使用Java的Long类型(64位)与前端JavaScript的Number类型(最大安全整数为2^53-1,即16位)进行数据交互时,很容易出现精度丢失的问题。这是因为JavaScript中的Number类型无法安全地表示超过16位的整数。为了解决这个问
DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理
STU学生网页设计
网页设计 期末网页作业 html静态网页 html5期末大作业 网页设计 web大作业
️精彩专栏推荐作者主页:【进入主页—获取更多源码】web前端期末大作业:【HTML5网页期末作业(1000套)】程序员有趣的告白方式:【HTML七夕情人节表白网页制作(110套)】文章目录二、网站介绍三、网站效果▶️1.视频演示2.图片演示四、网站代码HTML结构代码CSS样式代码五、更多源码二、网站介绍网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程
关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript
二挡起步
web前端期末大作业 javascript html css 旅游 风景
⛵源码获取文末联系✈Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业|游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作|HTML期末大学生网页设计作业,Web大学生网页HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScrip
HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动
二挡起步
web前端期末大作业 web设计网页规划与设计 html css javascript dreamweaver 前端
Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线
node.js学习
小猿L
node.js node.js 学习 vim
node.js学习实操及笔记温故node.js,node.js学习实操过程及笔记~node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记为什么学node.js可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vuereactangular离不开node.jsnode.js是什么官网:node.js是一个开源的、跨平台的运行JavaScript的运行
JavaScript 中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
跳房子的前端
前端面试 javascript 开发语言 ecmascript
在JavaScript中,深拷贝(DeepCopy)和浅拷贝(ShallowCopy)是用于复制对象或数组的两种不同方法。了解它们的区别和应用场景对于避免潜在的bugs和高效地处理数据非常重要。以下是对深拷贝和浅拷贝的详细解释,包括它们的概念、用途、优缺点以及实现方式。1.浅拷贝(ShallowCopy)概念定义:浅拷贝是指创建一个新的对象或数组,其中包含了原对象或数组的基本数据类型的值和对引用数
JavaScript `Map` 和 `WeakMap`详细解释
跳房子的前端
JavaScript 原生方法 javascript 前端 开发语言
在JavaScript中,Map和WeakMap都是用于存储键值对的数据结构,但它们有一些关键的不同之处。MapMap是一种可以存储任意类型的键值对的集合。它保持了键值对的插入顺序,并且可以通过键快速查找对应的值。Map提供了一些非常有用的方法和属性来操作这些数据对:set(key,value):将一个键值对添加到Map中。如果键已经存在,则更新其对应的值。get(key):获取指定键的值。如果键
切换淘宝最新npm镜像源是
hai40587
npm 前端 node.js
切换淘宝最新npm镜像源是一个相对简单的过程,但首先需要明确当前淘宝npm镜像源的状态和最新的镜像地址。由于网络环境和服务更新,镜像源的具体地址可能会发生变化,因此,我将基于当前可获取的信息,提供一个通用的切换步骤,并附上最新的镜像地址(截至回答时)。一、了解npm镜像源npm(NodePackageManager)是JavaScript的包管理器,用于安装、更新和管理项目依赖。由于npm官方仓库
高性能javascript--算法和流程控制
海淀萌狗
-for,while和do-while性能相当-避免使用for-in循环,==除非遍历一个属性量未知的对象==es5:for-in遍历的对象便不局限于数组,还可以遍历对象。原因:for-in每次迭代操作会同时搜索实例或者原型属性,for-in循环的每次迭代都会产生更多开销,因此要比其他循环类型慢,一般速度为其他类型循环的1/7。因此,除非明确需要迭代一个属性数量未知的对象,否则应避免使用for-i
360前端星计划-动画可以这么玩
马小蜗
动画的基本原理定时器改变对象的属性根据新的属性重新渲染动画functionupdate(context){//更新属性}constticker=newTicker();ticker.tick(update,context);动画的种类1、JavaScript动画操作DOMCanvas2、CSS动画transitionanimation3、SVG动画SMILJS动画的优缺点优点:灵活度、可控性、性能
JavaScript中秋快乐!
Q_w7742
javascript 开发语言 ecmascript
我们来实现一个简单的祝福网页~主要的难度在于使用canvas绘图当点击canvas时候,跳出“中秋节快乐”字样,需要注册鼠标单击事件和计时器。首先定义主要函数:初始化当点击canvas之后转到onCanvasClick函数,绘图生成灯笼。functiononCanvasClick(){//事件处理函数context.clearRect(0,0,canvas1.width,canvas1.heigh
Nginx从入门到实践(三)
听你讲故事啊
动静分离动静分离是将网站静态资源(JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。动静分离的一种做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求全部请求nginx服务器,达到动静分离的目标。rewrite规则Rewrite规则常见正则表达式Rewrite主要的功能就是实现URL的重写,Ngin
Nginx的使用场景:构建高效、可扩展的Web架构
张某布响丸辣
nginx 前端 架构
Nginx,作为当今最流行的Web服务器和反向代理软件之一,凭借其高性能、稳定性和灵活性,在众多Web项目中扮演着核心角色。无论是个人博客、中小型网站,还是大型企业级应用,Nginx都能提供强大的支持。本文将探讨Nginx的几个主要使用场景,帮助读者理解如何在实际项目中充分利用Nginx的优势。1.静态文件服务对于包含大量静态文件(如HTML、CSS、JavaScript、图片等)的网站,Ngin
前端知识点
ZhangTao_zata
前端 javascript css
下面是一个最基本的html代码body{font-family:Arial,sans-serif;margin:20px;}//JavaScriptfunctionthatdisplaysanalertwhencalledfunctionshowMessage(){alert("Hello!Youclickedthebutton.");}MyFirstHTMLPageWelcometoMyPage
【JS】前端文件读取FileReader操作总结
程序员-张师傅
前端 前端 javascript 开发语言
前端文件读取FileReader操作总结FileReader是JavaScript中的一个WebAPI,它允许web应用程序异步读取用户计算机上的文件(或原始数据缓冲区)的内容,例如读取文件以获取其内容,并在不将文件发送到服务器的情况下在客户端使用它。这对于处理图片、文本文件等非常有用,尤其是当你想要在用户界面中即时显示文件内容或进行文件预览时。创建FileReader对象首先,你需要创建一个Fi
webstorm报错TypeError: this.cliEngine is not a constructor
Blue_Color
点击Details在控制台会显示报错的位置TypeError:this.cliEngineisnotaconstructoratESLintPlugin.invokeESLint(/Applications/RubyMine.app/Contents/plugins/JavaScriptLanguage/languageService/eslint/bin/eslint-plugin.js:97:
创建一个完整的购物商城系统是一个复杂的项目,涉及前端(用户界面)、后端(服务器逻辑)、数据库等多个部分。由于篇幅限制,我无法在这里提供一个完整的系统代码,但我可以分别给出一些关键部分的示例代码,涵盖几
uthRaman
前端 ui 服务器
前端(HTML/CSS/JavaScript)grsyzp.cnHTML页面结构(index.html)html购物商城欢迎来到购物商城JavaScript(Ajax请求商品数据,app.js)javascriptdocument.addEventListener('DOMContentLoaded',function(){fetch('/api/products').then(response=
了解 UNPKG:前端开发者的包管理利器
小于负无穷
前端 javascript typescript css html5 node.js
在现代前端开发中,JavaScript包管理和模块化是至关重要的,而npm则是最流行的JavaScript包管理器之一。不过,随着前端项目复杂性的增加,有时候我们希望快速引入外部依赖,而无需本地安装和构建。此时,CDN(内容分发网络)成为了一种方便快捷的解决方案,而UNPKG就是这种方式中的佼佼者。什么是UNPKG?UNPKG是一个基于npm的内容分发网络(CDN),它允许开发者直接通过URL从n
2019-05-29 vue-router的两种模式的区别
Kason晨
1、大家都知道vue是一种单页应用,单页应用就是仅在页面初始化的时候加载相应的html/css/js一单页面加载完成,不会因为用户的操作而进行页面的重新加载或者跳转,用javascript动态的变化html的内容优点:良好的交互体验,用户不需要刷新页面,页面显示流畅,良好的前后端工作分离模式,减轻服务器压力,缺点:不利于SEO,初次加载耗时比较多2、hash模式vue-router默认的是hash
electron多标签页模式更像客户端
diygwcom
electron javascript 前端
Electron多标签页模式是指在Electron框架中实现的类似Web浏览器的多标签页功能。Electron是一个使用Web技术(HTML、CSS和JavaScript)来创建跨平台桌面应用程序的框架。在Electron中实现多标签页模式,通常需要借助一些特定的库或组件,如BrowserView或electron-tabs,或者通过自定义实现。实现方式1.使用BrowserViewBrowser
外卖霸王餐返利外卖会员卡小程序开发
闹小艾
good506070 微信小程序 小程序
外卖霸王餐返利外卖会员卡小程序开发"社交电商赋能下的外卖返利小程序"是专为商家与用户双赢而设计的创新平台。以下是其开发方案的详细步骤:一、需求梳理:首先,我们需要明确小程序的核心功能和特色。包括设定活动类型、返利策略,以及用户体验友好的界面设计。二、技术决策:技术选型是关键。我们采用小程序的开发框架,利用JavaScript作为前端开发语言,并结合微信提供的API进行后端接口调用与数据处理。三、账
Axure设计之全屏与退出全屏交互实现
招风的黑耳
Axure axure 交互
在AxureRP中,设计全屏与退出全屏的交互功能可以极大地提升用户体验,尤其是在展示产品原型或进行演示时。本文将详细介绍如何在AxureRP中通过结合JavaScript代码实现全屏与退出全屏的交互效果。Axure原型设计web端交互元件库:https://1zvcwx.axshare.com一、设计思路全屏与退出全屏的交互设计主要依赖于JavaScript代码来控制浏览器的全屏模式。在Axure
全面指南:用户行为从前端数据采集到实时处理的最佳实践
数字沉思
营销 流量运营 系统架构 前端 内容运营 大数据
引言在当今的数据驱动世界,实时数据采集和处理已经成为企业做出及时决策的重要手段。本文将详细介绍如何通过前端JavaScript代码采集用户行为数据、利用API和Kafka进行数据传输、通过Flink实时处理数据的完整流程。无论你是想提升产品体验还是做用户行为分析,这篇文章都将为你提供全面的解决方案。设计一个通用的ClickHouse表来存储用户事件时,需要考虑多种因素,包括事件类型、时间戳、用户信
EcmaScript和JavaScript的区别
每天吃八顿
前端 ecmascript
ECMAScript和JavaScript是经常被混淆的两个术语,但实际上它们之间存在一些区别:ECMAScript:ECMAScript(通常缩写为ES,并且有版本号如ES5,ES6和ES7等)是由ECMA国际(EuropeanComputerManufacturersAssociation)制定的一种脚本语言的规范。这个规范定义了语法、命令、数据类型等基本元素。ECMAScript是一种规范,
javascript添加p元素,html添加文字,appendChild
游勇一
javascript html添加p appendChild
javascript添加p元素,html添加文字,appendChild。网页添加p元素效果截图。个人签名:游志勇,预制板,南托岭预制场。文字展示#wordsadd{font-size:70px;word-break:break-all;}#wordsaddp{margin:002px0;padding:002px0;line-height:93%;}.btn_width{width:90px;}
CesiumJS+SuperMap3D.js混用实现可视域分析 S3M图层加载 裁剪区域绘制
SteveJi666
WebGL cesium EarthSDK SuperMap 3d javascript 前端 arcgis
版本简介:cesium:1.99;Supermap3D:SuperMapiClientJavaScript11i(2023);官方下载文档链家:SuperMap技术资源中心|为您提供全面的在线技术服务示例参考:support.supermap.com.cn:8090/webgl/Cesium/examples/webgl/examples.html#analysissupport.supermap
html打开本地excel文件夹,html使用excel表格数据库-html读取本地excel文件并展示
睿理
html表格如何导入到excel中在vs里面用添加数据源就可以啊,再使用数据控件,就可以操作.添加数据源可以用odbc数据源,两种方式1,是在控制面板的管理工具里在ODBC里先设置好.2,是使用连接字符串.用vs的添加数据源向导做.html中有没有类似excel表格,可以填数的表格控件?首先html不能读取本地excel文件其次就算是javascript也是不允许的这是为了安全考虑如果前端脚本可以
如何在 Python 中声明一个静态属性?
潮易
python 开发语言
在Python中,静态属性的定义和使用方式与JavaScript中的类似,主要是通过`@staticmethod`装饰器来实现。静态属性不需要实例化对象就可以访问,它们属于类本身。###如何声明一个静态属性:1.首先,需要在属性名前添加`@staticmethod`装饰器。2.接下来,定义一个普通方法,该方法的第一个参数通常为`cls`(用于表示类的引用)。###代码示例:```pythoncla
数据格式:什么是JSON和XML
isNotNullX
json xml
JSON和XML都是数据交换的一种格式,用于在不同的系统和应用程序之间传输和存储数据。本文将解释JSON和XML的基础内容,并探讨两者的不同。一·什么是JSON?1.JSON(JavaScriptObjectNotation)即JavaScript对象标记法:-JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。-JSON基于JavaScript的一个子集,但JSON是
HighCharts图表自动化简介
知识的宝藏
Selenium高级篇 Selenium图表自动化测试 highcharts图表自动化 Selenium图表自动化 图表自动化测试 highcharts Selenium
什么是分析数据?在任何应用程序中捕获并以图形或图表形式显示的分析数据是任何产品或系统的关键部分,因为它提供了对实时数据的洞察。验证此类分析数据非常重要,因为不准确的数据可能会在报告中产生问题,并可能影响应用程序/系统的其他相关领域。什么是HighChart?Highcharts是一个用纯JavaScript编写的j基于SVG成图技术的图表库,提供了一种简单的方法来向您的网站或Web应用程序添加交互
jQuery 键盘事件keydown ,keypress ,keyup介绍
107x
js jquery keydown keypress keyup
本文章总结了下些关于jQuery 键盘事件keydown ,keypress ,keyup介绍,有需要了解的朋友可参考。
一、首先需要知道的是: 1、keydown() keydown事件会在键盘按下时触发. 2、keyup() 代码如下 复制代码
$('input').keyup(funciton(){  
AngularJS中的Promise
bijian1013
JavaScript AngularJS Promise
一.Promise
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
为了展示它的优点,下面来看一个例子,其中需要获取用户当前的配置文件:
var cu
c++ 用数组实现栈类
CrazyMizzz
数据结构 C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T, int SIZE = 50>
class Stack{
private:
T list[SIZE];//数组存放栈的元素
int top;//栈顶位置
public:
Stack(
java和c语言的雷同
麦田的设计者
java 递归 scaner
软件启动时的初始化代码,加载用户信息2015年5月27号
从头学java二
1、语言的三种基本结构:顺序、选择、循环。废话不多说,需要指出一下几点:
a、return语句的功能除了作为函数返回值以外,还起到结束本函数的功能,return后的语句
不会再继续执行。
b、for循环相比于whi
LINUX环境并发服务器的三种实现模型
被触发
linux
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1 循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服
Oracle数据库查询指令
肆无忌惮_
oracle数据库
20140920
单表查询
-- 查询************************************************************************************************************
-- 使用scott用户登录
-- 查看emp表
desc emp
ext右下角浮动窗口
知了ing
JavaScript ext
第一种
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/
浅谈REDIS数据库的键值设计
矮蛋蛋
redis
http://www.cnblogs.com/aidandan/
原文地址:http://www.hoterran.info/redis_kv_design
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。
maven编译可执行jar包
alleni123
maven
http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
<build>
<plugins>
<plugin>
<artifactId>maven-asse
人力资源在现代企业中的作用
百合不是茶
HR 企业管理
//人力资源在在企业中的作用人力资源为什么会存在,人力资源究竟是干什么的 人力资源管理是对管理模式一次大的创新,人力资源兴起的原因有以下点: 工业时代的国际化竞争,现代市场的风险管控等等。所以人力资源 在现代经济竞争中的优势明显的存在,人力资源在集团类公司中存在着 明显的优势(鸿海集团),有一次笔者亲自去体验过红海集团的招聘,只 知道人力资源是管理企业招聘的 当时我被招聘上了,当时给我们培训 的人
Linux自启动设置详解
bijian1013
linux
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
阅读之前建议先看一下附图。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc
Spring Aop Schema实现
bijian1013
java spring AOP
本例使用的是Spring2.5
1.Aop配置文件spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmln
【Gson七】Gson预定义类型适配器
bit1129
gson
Gson提供了丰富的预定义类型适配器,在对象和JSON串之间进行序列化和反序列化时,指定对象和字符串之间的转换方式,
DateTypeAdapter
public final class DateTypeAdapter extends TypeAdapter<Date> {
public static final TypeAdapterFacto
【Spark八十八】Spark Streaming累加器操作(updateStateByKey)
bit1129
update
在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。
比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计一整天出现了多少次404,也就是说404监控横跨多个时间间隔。
Spark Streaming的解决方案是累加器,工作原理是,定义
linux系统下通过shell脚本快速找到哪个进程在写文件
ronin47
一个文件正在被进程写 我想查看这个进程 文件一直在增大 找不到谁在写 使用lsof也没找到
这个问题挺有普遍性的,解决方法应该很多,这里我给大家提个比较直观的方法。
linux下每个文件都会在某个块设备上存放,当然也都有相应的inode, 那么透过vfs.write我们就可以知道谁在不停的写入特定的设备上的inode。
幸运的是systemtap的安装包里带了inodewatch.stp,位
java-两种方法求第一个最长的可重复子串
bylijinnan
java 算法
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MaxPrefix {
public static void main(String[] args) {
String str="abbdabcdabcx";
Netty源码学习-ServerBootstrap启动及事件处理过程
bylijinnan
java netty
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式:
http://bylijinnan.iteye.com/blog/1992325
Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的
文章里面提到的操作,每一步都能在Netty里面找到对应的代码
其中Reactor里面的Acceptor就对应Netty的ServerBo
servelt filter listener 的生命周期
cngolon
filter listener servelt 生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后调用它的service方法处理请求。当第二次请求这个servlet资源时,servlet容器就不在创建实例,而是直接调用它的service方法处理请求,也就是说
jmpopups获取input元素值
ctrain
JavaScript
jmpopups 获取弹出层form表单
首先,我有一个div,里面包含了一个表单,默认是隐藏的,使用jmpopups时,会弹出这个隐藏的div,其实jmpopups是将我们的代码生成一份拷贝。
当我直接获取这个form表单中的文本框时,使用方法:$('#form input[name=test1]').val();这样是获取不到的。
我们必须到jmpopups生成的代码中去查找这个值,$(
vi查找替换命令详解
daizj
linux 正则表达式 替换 查找 vim
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
1: /abc<En
对网站中的js,css文件进行打包
dcj3sjt126com
PHP 打包
一,为什么要用smarty进行打包
apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件进行打包。
为什么要进行打包呢,主要目的是为了合理的管理自己的代码 。现在有好多网站,你查看一下网站的源码的话,你会发现网站的头部有大量的JS文件和CSS文件,网站的尾部也有可能有大量的J
php Yii: 出现undefined offset 或者 undefined index解决方案
dcj3sjt126com
undefined
在开发Yii 时,在程序中定义了如下方式:
if($this->menuoption[2] === 'test'),那么在运行程序时会报:undefined offset:2,这样的错误主要是由于php.ini 里的错误等级太高了,在windows下错误等级
linux 文件格式(1) sed工具
eksliang
linux linux sed工具 sed工具 linux sed详解
转载请出自出处:
http://eksliang.iteye.com/blog/2106082
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
Android应用程序获取系统权限
gqdy365
android
引用
如何使Android应用程序获取系统权限
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点
HoverTree开发日志之验证码
hvt
.net C# asp.net hovertree webform
HoverTree是一个ASP.NET的开源CMS,目前包含文章系统,图库和留言板功能。代码完全开放,文章内容页生成了静态的HTM页面,留言板提供留言审核功能,文章可以发布HTML源代码,图片上传同时生成高品质缩略图。推出之后得到许多网友的支持,再此表示感谢!留言板不断收到许多有益留言,但同时也有不少广告,因此决定在提交留言页面增加验证码功能。ASP.NET验证码在网上找,如果不是很多,就是特别多
JSON API:用 JSON 构建 API 的标准指南中文版
justjavac
json
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,
数据结构随记_2
lx.asymmetric
数据结构 笔记
第三章 栈与队列
一.简答题
1. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。
2.在具有n个单元的循环队列中,队满时共有 n-1 个元素。
3. 向栈中压入元素的操作是先 移动栈顶指针&n
Linux下的监控工具dstat
网络接口
linux
1) 工具说明dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是,
C 语言初级入门--二维数组和指针
1140566087
二维数组 c/c++ 指针
/*
二维数组的定义和二维数组元素的引用
二维数组的定义:
当数组中的每个元素带有两个下标时,称这样的数组为二维数组;
(逻辑上把数组看成一个具有行和列的表格或一个矩阵);
语法:
类型名 数组名[常量表达式1][常量表达式2]
二维数组的引用:
引用二维数组元素时必须带有两个下标,引用形式如下:
例如:
int a[3][4]; 引用:
10点睛Spring4.1-Application Event
wiselyman
application
10.1 Application Event
Spring使用Application Event给bean之间的消息通讯提供了手段
应按照如下部分实现bean之间的消息通讯
继承ApplicationEvent类实现自己的事件
实现继承ApplicationListener接口实现监听事件
使用ApplicationContext发布消息