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
{
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 = "点击这里:系统根据邮编自动更改地址的省市区选项。 ";
}
//-------------------------------------------------------根据邮编自动更改地址的省市区选项----------------------------------------------------------
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 {
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")
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-))$
ErrorMessage="请输入11位手机号码" ValidationExpression="^1(3|5)/d{9}$">
ErrorMessage="邮编为6位数字" ValidationExpression="^/d{6}$">
ErrorMessage="正确格式020-XXXXXXXX" ValidationExpression="^(([0/+]/d{2,3}-)?(0/d{2,3})-)?(/d{7,8})(-(/d{3,}))?$">
中国电话号码验证 非法字符: ^(?:[/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编写的程序代码如下:
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编写以下脚本,验证用户输入的邮件地址的有效性。
你可能感兴趣的:(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应用程序添加交互
jvm调优总结(从基本概念 到 深度优化)
oloz
java jvm jdk 虚拟机 应用服务器
JVM参数详解:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
【Scala十六】Scala核心十:柯里化函数
bit1129
scala
本篇文章重点说明什么是函数柯里化,这个语法现象的背后动机是什么,有什么样的应用场景,以及与部分应用函数(Partial Applied Function)之间的联系 1. 什么是柯里化函数
A way to write functions with multiple parameter lists. For instance
def f(x: Int)(y: Int) is a
HashMap
dalan_123
java
HashMap在java中对很多人来说都是熟的;基于hash表的map接口的非同步实现。允许使用null和null键;同时不能保证元素的顺序;也就是从来都不保证其中的元素的顺序恒久不变。
1、数据结构
在java中,最基本的数据结构无外乎:数组 和 引用(指针),所有的数据结构都可以用这两个来构造,HashMap也不例外,归根到底HashMap就是一个链表散列的数据
Java Swing如何实时刷新JTextArea,以显示刚才加append的内容
周凡杨
java 更新 swing JTextArea
在代码中执行完textArea.append("message")后,如果你想让这个更新立刻显示在界面上而不是等swing的主线程返回后刷新,我们一般会在该语句后调用textArea.invalidate()和textArea.repaint()。
问题是这个方法并不能有任何效果,textArea的内容没有任何变化,这或许是swing的一个bug,有一个笨拙的办法可以实现
servlet或struts的Action处理ajax请求
g21121
servlet
其实处理ajax的请求非常简单,直接看代码就行了:
//如果用的是struts
//HttpServletResponse response = ServletActionContext.getResponse();
// 设置输出为文字流
response.setContentType("text/plain");
// 设置字符集
res
FineReport的公式编辑框的语法简介
老A不折腾
finereport 公式 总结
FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式。
简单的说下自己感觉的公式要注意的几个地方:
1.if语句语法刚接触感觉比较奇怪,if(条件式子,值1,值2),if可以嵌套,if(条件式子1,值1,if(条件式子2,值2,值3)
linux mysql 数据库乱码的解决办法
墙头上一根草
linux mysql 数据库乱码
linux 上mysql数据库区分大小写的配置
lower_case_table_names=1 1-不区分大小写 0-区分大小写
修改/etc/my.cnf 具体的修改内容如下:
[client]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/va
我的spring学习笔记6-ApplicationContext实例化的参数兼容思想
aijuans
Spring 3
ApplicationContext能读取多个Bean定义文件,方法是:
ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[]{“bean-config1.xml”,“bean-config2.xml”,“bean-config3.xml”,“bean-config4.xml
mysql 基准测试之sysbench
annan211
基准测试 mysql基准测试 MySQL测试 sysbench
1 执行如下命令,安装sysbench-0.5:
tar xzvf sysbench-0.5.tar.gz
cd sysbench-0.5
chmod +x autogen.sh
./autogen.sh
./configure --with-mysql --with-mysql-includes=/usr/local/mysql
sql的复杂查询使用案列与技巧
百合不是茶
oracle sql 函数 数据分页 合并查询
本片博客使用的数据库表是oracle中的scott用户表;
------------------- 自然连接查询
查询 smith 的上司(两种方法)
&
深入学习Thread类
bijian1013
java thread 多线程 java多线程
一. 线程的名字
下面来看一下Thread类的name属性,它的类型是String。它其实就是线程的名字。在Thread类中,有String getName()和void setName(String)两个方法用来设置和获取这个属性的值。
同时,Thr
JSON串转换成Map以及如何转换到对应的数据类型
bijian1013
java fastjson net.sf.json
在实际开发中,难免会碰到JSON串转换成Map的情况,下面来看看这方面的实例。另外,由于fastjson只支持JDK1.5及以上版本,因此在JDK1.4的项目中可以采用net.sf.json来处理。
一.fastjson实例
JsonUtil.java
package com.study;
impor
【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架
bit1129
spring
HttpInvoker是Spring原生的RPC调用框架,HttpInvoker同Burlap和Hessian一样,提供了一致的服务Exporter以及客户端的服务代理工厂Bean,这篇文章主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成
在
【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中
【Mahout二】基于Mahout CBayes算法的20newsgroup的脚本分析
bit1129
Mahout
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information re
nginx三种获取用户真实ip的方法
ronin47
随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址,如果后端是apache,请跳转到<apache获取用户真实IP地址>,如果是后端真实服务器是nginx,那么继续往下看。
实例环境: 用户IP 120.22.11.11
java-判断二叉树是不是平衡
bylijinnan
java
参考了
http://zhedahht.blog.163.com/blog/static/25411174201142733927831/
但是用java来实现有一个问题。
由于Java无法像C那样“传递参数的地址,函数返回时能得到参数的值”,唯有新建一个辅助类:AuxClass
import ljn.help.*;
public class BalancedBTree {
BeanUtils.copyProperties VS PropertyUtils.copyProperties
诸葛不亮
PropertyUtils BeanUtils
BeanUtils.copyProperties VS PropertyUtils.copyProperties
作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然;比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时,没有考虑到会将null转换为0,而后面的业
[金融与信息安全]最简单的数据结构最安全
comsci
数据结构
现在最流行的数据库的数据存储文件都具有复杂的文件头格式,用操作系统的记事本软件是无法正常浏览的,这样的情况会有什么问题呢?
从信息安全的角度来看,如果我们数据库系统仅仅把这种格式的数据文件做异地备份,如果相同版本的所有数据库管理系统都同时被攻击,那么
vi区段删除
Cwind
linux vi 区段删除
区段删除是编辑和分析一些冗长的配置文件或日志文件时比较常用的操作。简记下vi区段删除要点备忘。
vi概述
引文中并未将末行模式单独列为一种模式。单不单列并不重要,能区分命令模式与末行模式即可。
vi区段删除步骤:
1. 在末行模式下使用:set nu显示行号
非必须,随光标移动vi右下角也会显示行号,能够正确找到并记录删除开始行
清除tomcat缓存的方法总结
dashuaifu
tomcat 缓存
用tomcat容器,大家可能会发现这样的问题,修改jsp文件后,但用IE打开 依然是以前的Jsp的页面。
出现这种现象的原因主要是tomcat缓存的原因。
解决办法如下:
在jsp文件头加上
<meta http-equiv="Expires" content="0"> <meta http-equiv="kiben&qu
不要盲目的在项目中使用LESS CSS
dcj3sjt126com
Web less
如果你还不知道LESS CSS是什么东西,可以看一下这篇文章,是我一朋友写给新人看的《CSS——LESS》
不可否认,LESS CSS是个强大的工具,它弥补了css没有变量、无法运算等一些“先天缺陷”,但它似乎给我一种错觉,就是为了功能而实现功能。
比如它的引用功能
?
.rounded_corners{
[入门]更上一层楼
dcj3sjt126com
PHP yii2
更上一层楼
通篇阅读完整个“入门”部分,你就完成了一个完整 Yii 应用的创建。在此过程中你学到了如何实现一些常用功能,例如通过 HTML 表单从用户那获取数据,从数据库中获取数据并以分页形式显示。你还学到了如何通过 Gii 去自动生成代码。使用 Gii 生成代码把 Web 开发中多数繁杂的过程转化为仅仅填写几个表单就行。
本章将介绍一些有助于更好使用 Yii 的资源:
Apache HttpClient使用详解
eksliang
httpclient http协议
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会
zxing二维码扫描功能
gundumw100
android zxing
经常要用到二维码扫描功能
现给出示例代码
import com.google.zxing.WriterException;
import com.zxing.activity.CaptureActivity;
import com.zxing.encoding.EncodingHandler;
import android.app.Activity;
import an
纯HTML+CSS带说明的黄色导航菜单
ini
html Web html5 css hovertree
HoverTree带说明的CSS菜单:纯HTML+CSS结构链接带说明的黄色导航
在线体验效果:http://hovertree.com/texiao/css/1.htm代码如下,保存到HTML文件可以看到效果:
<!DOCTYPE html >
<html >
<head>
<title>HoverTree
fastjson初始化对性能的影响
kane_xie
fastjson 序列化
之前在项目中序列化是用thrift,性能一般,而且需要用编译器生成新的类,在序列化和反序列化的时候感觉很繁琐,因此想转到json阵营。对比了jackson,gson等框架之后,决定用fastjson,为什么呢,因为看名字感觉很快。。。
网上的说法:
fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。
基于Mybatis封装的增删改查实现通用自动化sql
mengqingyu
DAO
1.基于map或javaBean的增删改查可实现不写dao接口和实现类以及xml,有效的提高开发速度。
2.支持自定义注解包括主键生成、列重复验证、列名、表名等
3.支持批量插入、批量更新、批量删除
<bean id="dynamicSqlSessionTemplate" class="com.mqy.mybatis.support.Dynamic
js控制input输入框的方法封装(数字,中文,字母,浮点数等)
qifeifei
javascript js
在项目开发的时候,经常有一些输入框,控制输入的格式,而不是等输入好了再去检查格式,格式错了就报错,体验不好。 /** 数字,中文,字母,浮点数(+/-/.) 类型输入限制,只要在input标签上加上 jInput="number,chinese,alphabet,floating" 备注:floating属性只能单独用*/
funct
java 计时器应用
tangqi609567707
java timer
mport java.util.TimerTask; import java.util.Calendar; public class MyTask extends TimerTask { private static final int
erlang输出调用栈信息
wudixiaotie
erlang
在erlang otp的开发中,如果调用第三方的应用,会有有些错误会不打印栈信息,因为有可能第三方应用会catch然后输出自己的错误信息,所以对排查bug有很大的阻碍,这样就要求我们自己打印调用的栈信息。用这个函数:erlang:process_display (self (), backtrace).需要注意这个函数只会输出到标准错误输出。
也可以用这个函数:erlang:get_s