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)
实现音乐播放器实现:前端HTML,CSS,JavaScript综合大项目(java实战)
用心去追梦
前端 html css
创建一个音乐播放器项目,使用HTML、CSS和JavaScript作为前端技术栈,并结合Java后端(如果需要),可以是一个很好的实战项目。这个项目不仅能够帮助你掌握前端开发技能,还能让你了解如何与后端交互来获取数据。下面是实现这样一个音乐播放器项目的步骤指南,包括了从规划到部署的各个方面。1.项目规划规划功能基本功能播放/暂停按钮。音量控制。进度条。歌曲列表显示。高级功能随机播放。列表循环。搜索
盘点原生JavaScript中直接触发事件的方式
javascript
JavaScript提供了多种方式来直接触发事件,无论是在用户交互、程序逻辑处理或是数据更新时。本文将全面探讨原生JavaScript中各种事件触发方式,并通过深入的技术案例分析,帮助开发者掌握这些方法在实际开发中的应用。使用dispatchEvent原生JavaScript中触发事件的核心方法是dispatchEvent。这个方法允许开发者为任何DOM元素触发几乎任何类型的事件,包括但不限于点击
Node.js超详细教程!
刘大本尊
前端技术 node.js
0.基础概念Node.js是一个基于ChromeV8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript运行在服务端的开发平台。官方地址:https://nodejs.org/en中文地址:https://nodejs.org/zh-cn代码初体验:console.log("helloNodeJS")//1.进入到对应js文件的目录下//2.执行nod
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
watermelo37
前端 # 数据结构 javascript vue.js 前端 算法 数据分析 数据挖掘
目录JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)一、什么时候该使用Array.map(),与forEach()的区别是什么?1、什么时候该用Array.map()2、Array.map()与Array.forEach()的区别二、Array.map()的使用与
JS工程化集锦
项目工具模块化JS模块规范CommonJS·AMD·CMD·UMD·ES6NPM版本NPM版本介绍打包构建polyfill工程化篇-JS兼容方案项目管理LintCodeReview效率工具ESLint方案官方:https://cn.eslint.org/docs/user-guide/configuringairbnb:https://github.com/airbnb/javascriptsta
【2024年华为OD机试】(C/D卷,200分)- 5G网络建设 (JavaScript&Java & Python&C/C++)
妄北y
算法汇集笔记总结(保姆级) 华为od c语言 5G python javascript java 网络
一、问题描述题目描述现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站,编号固定为1到N。接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通。不同基站之间假设光纤的成本各不相同,且有些节点之间已经存在光纤相连。请你设计算法,计算出能联通这些基站的最小成本是多少。注意:基站的联通具有传递性,比如基站A与基站B架设了光纤,基站B与基站C也架设了光纤,则基站A与基站C视为可以互相联通。
JS中const有没有变量提升
lvbb66
javascript 前端 开发语言
在JavaScript中,const关键字用于声明一个只读的常量,其值在初始化后不能被重新赋值。关于变量提升(Hoisting),它是JavaScript中一个重要的概念,指的是无论变量或函数声明在何处,它们都会被“提升”到其所在作用域的最顶部。但是,这个规则不完全适用于const和let声明的变量。变量提升(Hoisting)的传统理解在ES6之前,JavaScript只有var关键字用于声明变
用python、JavaScript (Node.js)、JAVA等多种语言的实例代码演示教你如何获取股票数据(实时数据、历史数据、CDMA、KDJ等指标数据配有股票数据API接口说明文档详解参数说明
Eumenides_max
python javascript node.js 股票API接口 股票数据接口
近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据中挖掘出有价值的信息,为我们的投资策略提供有力的支持。在寻找数据的过程中,我尝试了多种途径,包括自编网易股票页面爬虫、申万行业数据爬虫,以及同花
【前端三剑客实现3D相册~爱她,就为她做一个3D相册吧!!!】
烂然星陈
前端动态集 前端 3d html5 css3 javascript
爱她,就为她做一个3D相册吧!!!创建一个3D相册盒子效果的HTML页面引言一、技术栈二、页面结构三、样式设计四、JavaScript逻辑五、总结完整源码获取,私信了解更多!!!创建一个3D相册盒子效果的HTML页面引言在网页设计中,3D效果总能吸引用户的注意力,提升用户体验。本文介绍如何使用HTML、CSS和JavaScript创建一个3D相册盒子效果。这个效果不仅包含了3D旋转和缩放动画,还结
Vue 3 中的 fragment 是什么?它为什么被引入?
JJCTO袁龙
Vue vue.js 前端 javascript
Vue3中的Fragment:全新特性与应用场景在前端开发中,我们自主决定如何组织和展示数据。对于频繁与DOM打交道的开发者而言,如何高效、灵活地进行渲染显得尤为重要。Vue.js作为一款备受欢迎的渐进式JavaScript框架,持续为开发者提供各种性能优化和特性增强。在Vue3中,Fragment功能的引入为开发者们提供了更多选择与便利。本文将重点讨论Vue3中的Fragment的含义、特性,以
五、React(环境配置和ES6语法糖)
老帅比阿
web前端开发 javascript react.js 前端
文章目录一、React是什么?二、React能用来做什么?三、配置环境四、ES6语法糖总结一、React是什么?React是一个开源JavaScript库,用于专门为单页应用程序构建用户界面。它用于处理Web和移动应用程序的视图层,允许我们创建可重用的UI组件。二、React能用来做什么?React非常灵活。你学会了React,你就可以在各种各样的平台上使用它来构建高质量的用户界面。React是一
TypeScript语言的软件工程
编程小筑
包罗万象 golang 开发语言 后端
TypeScript语言的软件工程实践引言在现代软件工程中,编程语言的选择对项目的成功至关重要。近年来,JavaScript凭借其在Web开发中的广泛应用取得了巨大成功。然而,随着Web应用程序的复杂性不断增加,开发者渐渐发现纯JavaScript在可维护性、类型安全性和开发效率方面的不足。为了解决这些问题,TypeScript应运而生。TypeScript是一种由微软开发的开源语言,它在Java
IOS APP上架被拒 4.3(a) - Design - Spam,成功
星辰文宇
ios ios uni-app
目录一、被拒原因二、百度方法三、尝试uniapp打包iosapk,混淆代码1、JavaScript-obfuscator插件(我没有使用)编辑2、HbuliderXuniapp混淆(做了)3、IpaGuard混淆工具四、上传ipa文件1、先处理失败的App2、上传ipa文件一、被拒原因翻译一下:我们注意到,您的应用程序与终止的苹果开发者计划帐户之前提交的应用程序共享类似的二进制、元数据和/或概念。
小白也能懂的Vite + React组件开发完全指南
前端
学习前端开发,你可能会听说过很多工具和框架,其中Vite和React无疑是炙手可热的明星。Vite凭借其闪电般的速度和优秀的开发体验,迅速成为了许多开发者的首选构建工具;而React,作为目前最流行的JavaScript库之一,以其组件化、声明式编程的特性,简化了复杂的Web应用开发。这篇教程将带你快速掌握AI写代码工具Vite和React组件开发的核心技能,让你从小白也能轻松入门,独立完成简单的
React Native 介绍
王睿丶
资讯看点 React Native 移动开发 跨平台 React 王睿丶
文章目录一丶ReactNative惊喜二丶ReactNative简介三丶ReactNative特性四丶ReactNative优点五丶ReactNative局限性六丶构建最简单的应用七丶学习资料一丶ReactNative惊喜ReactNative是一个使用JavaScript和React来编写跨终端移动应用(Android或IOS)的一种解决方案这句话是什么意思呢?即使你不懂如何使用Java或Kot
React Native
Sabrina_FN
APP测试 react native react.js javascript
一、react框架简介:是一个用于构建用户界面的JavaScript库,主要用于构建UI,只专注于实现MVC中View层面的实现特点:声明式设计:使用声明式的编成方式,使得react逻辑足够简化高效:采用VirtualDom(虚拟dom),减少与dom间交互的花费灵活:可以与已知库或者框架很好的配合JSX:执行速度快,类型安全、在编译过程中就能发现错误,像XML的JavaScript语法扩展,编写
【Linux奇遇记】我和Linux的初次相遇
2401_89210258
linux 状态模式 运维
Linux的文件路径类型编辑Linux常用命令介绍Linux在生活中的应用全文总结前端和后端的介绍前端和后端是指现代Web应用程序的两个主要组成部分。1.前端前端(也称为客户端)是指向用户显示内容的所有方面。前端开发涉及使用HTML、CSS和JavaScript等技术来创建和维护Web应用程序的用户接口。2.后端后端(也称为服务器端)是指Web应用程序的非用户界面部分。后端开发涉及使用不同的编程语
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
vip1024p
vip1024p 前端 javascript 开发语言
在前端开发中,JavaScript异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如Promise、async/await等),开发者常常会遇到Uncaught(inpromise)error错误。这个错误是由于未正确处理Promise的拒绝(rejection)而导致的,常常出现在异步操作失败的情况下。如果不妥善处理,可能会导致应用的不稳定和用户体验的下降。本文将深入分析Uncaugh
面试官:谈谈你对JavaScript原型链的理解
程序员
在前端开发领域的每一次深入交流中,JavaScript的原型链总是那个绕不开的技术高地。它不仅是理解JavaScript对象模型的关键,也是评估前端开发者技术深度和广度的重要指标。引言:为何原型链如此重要?在JavaScript中,原型链是实现继承的核心机制。它允许对象通过原型对象间接地共享属性和方法,这种机制不仅减少了代码的冗余,还提高了代码的可复用性和灵活性。因此,掌握原型链的原理和应用,对于
【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)
翠花上酸菜
selenium 网络爬虫 python selenium javascript
我们在写selenium获取网络信息的时候,有时候我们会受到对方浏览器的监控,对方通过分析用户行为模式,如点击、滚动、停留时间等,网站可以识别出异常行为,进而对Selenium爬虫进行限制。这里我们可以加入JavaScript的使用。Selenium可以执行JavaScript,通过使用execute_script方法,来执行点击操作。它可以绕过一些Selenium直接操作元素时可能遇到的问题,比
JavaScript 运算符详解
一蓑烟雨..
javascript笔记 javascript js
JavaScript(3)运算符详解1.算数运算符//当对非Number类型的值进行运算时,会将其转换为Number类型//任何值和NaN做运算都为NaN//对字符串做加法,结果返回字符串//任何值和字符串做加法运算,都会先转化为字符串再计算vara=123+223;vara=true+1;vara='123'+'456';vara='123'+456;//转化成字符串vara=123+'';//
Vue.js 的组合式 API 与状态管理
随着现代前端开发的不断发展,Vue.js作为一个渐进式JavaScript框架,已经成为开发动态和交互式用户界面的流行选择之一。Vue.js的设计旨在通过简洁的语法和强大的功能来提升开发者的生产力。在Vue3中引入的组合式API(CompositionAPI)及其状态管理功能,为开发者提供了一种灵活且可扩展的方式来构建复杂的应用程序。本文将深入探讨Vue.js的组合式API,并结合状态管理的概念,
React 19新特性探索:提升性能与开发者体验
程序员
React作为最受欢迎的JavaScript库之一,不断推出新版本以应对日益复杂的应用需求。React19作为最新的版本,引入了一系列令人兴奋的新特性和改进,旨在进一步提升应用的性能、开发效率和用户体验。本文将深入探讨React19的新特性,包括异步操作管理、文档元数据和样式表支持、ServerComponents与服务器端渲染等,帮助开发者更好地理解和利用这些新特性来构建更强大、更高效的Reac
小明,谈谈你对Vue 虚拟dom的理解
程序员
Vue.js的虚拟DOM(VirtualDOM)是为了提高前端性能和开发体验而引入的一种技术。Vue.js虚拟DOM的大致实现虚拟DOM的定义虚拟DOM是一种JavaScript对象,它用来描述用户界面(UI)的结构和内容。每个虚拟DOM节点(VNode)代表一个真实的DOM元素或组件实例。//VNode示例constvnode={tag:'div',data:{id:'app'},childre
Vue.js 的组合式 API 与状态管理
随着现代前端开发的不断发展,Vue.js作为一个渐进式JavaScript框架,已经成为开发动态和交互式用户界面的流行选择之一。Vue.js的设计旨在通过简洁的语法和强大的功能来提升开发者的生产力。在Vue3中引入的组合式API(CompositionAPI)及其状态管理功能,为开发者提供了一种灵活且可扩展的方式来构建复杂的应用程序。本文将深入探讨Vue.js的组合式API,并结合状态管理的概念,
JavaScript 运算符详解:各类运算符及优先级。
前端基地
javascript 运算符优先级 算数运算符 逻辑运算符 一元运算符 比较运算符 赋值运算符
目录非VIP用户可前往公众号“前端基地”进行免费阅读运算符介绍运算符优先级算数运算符赋值运算符比较运算符逻辑运算符介绍a&&b和a||b一元运算符非VIP用户可前往公众号“前端基地”进行免费阅读运算符介绍以下是各类运算符的详细介绍:运算符描述算术运算符加(+)、减(-)、乘(*)、除(/)、求余数并保留整数(%)、累加(++)、递减(--)赋值运算符=、+=(num+=5等同于num=num+5)
你不知道的javascript-13(var的接替者let与const)
我爱学习_zwj
你不知道的javascript javascript 前端 开发语言 面试
1.let与const的基本使用在ES5中我们声明变量都是使用的var(variable)关键字,从ES6开始新增了两个关键字可以声明变量:let、constlet、const在其他编程语言中都是有的,所以也并不是新鲜的关键字但是let、const确确实实给JavaScript带来一些不一样的东西从使用角度来说,只是在原有基础上换一个名字而已,使用的位置和方式是一样的varname='zs'let
JavaScript的那些不可不知的知识
遇见~未来
JavaScript javascript 开发语言 ecmascript
目录JavaScript基础JavaScript高级JavaScript基础数据类型:JavaScript的数据类型分为基本数据类型和引用数据类型。基本数据类型包含number(数字)、string(字符串)、boolean(布尔值)、null(空值)、undefined(未定义)。而像array(数组)、function(函数)等则属于引用数据类型。在内存存储方面,基本类型是按值存储在栈中,引用
《中型 Vue 项目:挑战与成长》
计算机毕设定制辅导-无忧学长
# Vue vue.js flutter 前端
一、引言在当今的前端开发领域,Vue作为一款渐进式JavaScript框架,以其强大的功能和灵活性备受开发者青睐。对于中型Vue项目而言,其重要性不言而喻。中型Vue项目通常在功能复杂度和规模上介于小型项目和大型项目之间,既需要应对一定的业务需求挑战,又要考虑开发效率和可维护性。中型Vue项目面临着诸多挑战与机遇。挑战方面,随着项目规模的扩大,代码的复杂性增加,如何进行有效的状态管理、组件化开发以
npm介绍
小玉起起
vue js npm 前端 node.js
npm(NodePackageManager)是Node.js的默认包管理工具,用于管理JavaScript和Node.js项目的依赖关系。它既是一个包管理工具,又是一个在线仓库,开发者可以通过它分享和下载开源的JavaScript库和工具。npm是世界上最大的开源软件注册表,托管着超过一百万个包。主要功能和特点1.包管理npm的核心功能是管理依赖包。它允许开发者方便地安装、更新和删除项目中的依赖
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