« test? | Main | Learning notes of my addon project »
May 18, 2009
Some Javascript
It is inefficient to write validation code every time. Here is some JS validation code I wrote during the spare time. Its pretty much everything I copied and pasted from my Chinese blog
我们写Form时,如果每次都要写检验代码,那就太低效率了,这里有些常用的检验代码,与大家共享。
//---------------------------------------------------if "Space bar" input
function isWhitespace (s)
{
var whitespace = " \t\n\r";
var i;
for (i = 0; i < s.length; i++)
{
var c = s.charAt(i);
if (whitespace.indexOf(c) >= 0)
{
return true;
}
}
return false;
}
//--------------------------------------------------Char only( the "bad char" won't be allowed)
function ischar(s)
{
var errorChar;
var badChar = "><,[]{}?/+=|\\'\":;~!@#$%^&()`";
if ( s == "" )
{
alert("请您输入内容!")
return false;
}
if ( isWhitespace(s) )
{
alert("输入的字符中不能包含空格符,请重新输入!");
return false;
}
errorChar = isCharsInBagEx( s, badChar)
if (errorChar != "" )
{
alert("您输入的字符" + s+"是无效的,\n\n请不要在字符中输入" + errorChar + "!\n\n请重新输入合法的字符!" );
return false;
}
return true;
}
//---------------------------------------------------Email
function isEmail(s)
{
if (isEmpty(s))
{
alert("输入的E-mail地址不能为空,请输入!");
return false;
}
//is s contain whitespace
if (isWhitespace(s))
{
alert("输入的E-mail地址中不能包含空格符,请重新输入!");
return false;
}
var i = 1;
var len = s.length;
if (len > 40)
{
alert("E-mail地址长度不能超过40位!");
return false;
}
pos1 = s.indexOf("@");
pos2 = s.indexOf(".");
pos3 = s.lastIndexOf("@");
pos4 = s.lastIndexOf(".");
if ((pos1 <= 0)||(pos1 == len)||(pos2 <= 0)||(pos2 == len)){
alert("请输入有效的E-mail地址!");
return false;
}
else{
if( (pos1 == pos2 - 1) || (pos1 == pos2 + 1)
|| ( pos1 != pos3 ) //find two @
|| ( pos4 < pos3 ) ) //. should behind the [email=[ft=#808080,,]'@']%27@%27[/email]
{
alert("请输入有效的E-mail地址!");
return false;
}
}
if ( !isCharsInBag( s, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_@"))
{
alert("email地址中只能包含字符ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_@\n" + "请重新输入" );
return false;
}
return true;
}
//--------------------------------------------------Number
function isNum(s)
{
if (isEmpty(s)){
alert("必须输入数字")
return false;
}
if(!isCharsInBag (s, "0123456789")){
alert("请检查一下您输入的是否为数字!");
return false;
}
// if (s<1){
// alert("输入的数字要大于0!");
// return false;
// }
// if (s>2000){
// alert("输入的数字要小于2000!");
// return false;
// }
return true;
}
//--------------------------------------------------Chinese id
function isCardNum(s)
{
if (isEmpty(s)){
alert("必须输入数字")
return false;
}
if(!isCharsInBag (s, "0123456789")){
alert("请检查一下您输入的是否为数字?quot;);
return false;
}
if (s.length==15 || s.length==18){
return true;
}else{
alert("输入的数字长度为15位或者18位!");
return false;
}
}
//--------------------------------------------------Test if the birth date equals the real birthday(与出生年月日对照)
function isIdCardNo(num)
{
if (isNaN(num)) {alert("输入的不是数字!"); return false;}
var len = num.length, re;
if (len == 15)
re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
else if (len == 18)
re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
else {alert("输入的数字位数不对!"); return false;}
var a = num.match(re);
if (a != null)
{
if (len==15)
{
var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
var B = D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
}
else
{
var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);
var B = D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
}
if (!B) {alert("输入的身份证号 "+ a[0] +" 里出生日期不对!"); return false;}
}
return true;
}
//--------------------------------------------------provice info from the ID
//-------------------------------------------------post code
function isZipCode(s){
if (!isEmpty(s)){
if(!isCharsInBag (s, "0123456789")){
alert("请检查一下您输入的是否为数字!");
return false;
}
if (s.length==6){
return true;
}else{
alert("输入的邮政编码长度为6!");
return false;
}
} else {
return true;
}
}
//---------------------------------------------------Test if input is in the given string
function isCharsInBag (s, bag)
{
var i;
// Search through string's characters one by one.
// If character is in bag, append to returnString.
for (i = 0; i < s.length; i++)
{
// Check that current character isn't whitespace.
var c = s.charAt(i);
if (bag.indexOf(c) == -1) return false;
}
return true;
}
function isEmpty(s)
{
return ((s == null)||(s.length == 0));
//----------------------------------------------------years
function isYear(s)
{
var Today=new Date()
thisYear=Today.getYear()
var badChar = "><,[]{}?/+=|\\'\":;~!@#$%^&`";
var len = s.length;
if (isEmpty(s)){
alert("必须输入年份")
return false;
}
if ( isCharsInBag( s, badChar)){
alert("年份输入非法")
return false;
}
if ((len!=4)){
alert("年份是四位!");
return false;
}
if(!isCharsInBag (s, "0123456789")){
alert("请检查一下您输入的年份是否为数字!");
return false;
}
if (s<1800){
alert("年份要大于1800");
return false;
}
// if ((thisYear-s)<0){
// alert("年份要不能大于"+thisYear);
// return false;
// }
return true;
}
}
//----------------------------------------------------if chosen...
function radioselected(radioBth)
{
for(i=0;i
if(radioBth.checked)
return true
}
return false
}
//---------------------------------------------------phone number
function fucCheckTEL(TEL)
{
var i,j,strTemp;
strTemp="0123456789-()# ";
for (i=0;i
j=strTemp.indexOf(TEL.charAt(i));
if (j==-1)
{
return false;
}
}
return true;
}
//----------------------------------------------------严格电话号码的验证
要求:
(1)电话号码由数字、"("、")"和"-"构成
(2)电话号码为3到8位
(3)如果电话号码中包含有区号,那么区号为三位或四位
(4)区号用"("、")"或"-"和其他部分隔开
(5)移动电话号码为11或12位,如果为12位,那么第一位为0
(6)11位移动电话号码的第一位和第二位为"13"
(7)12位移动电话号码的第二位和第三位为"13"
根据这几条规则,可以与出以下正则表达式:
(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)
//具有在输入非数字字符不回显的效果,即对非数字字符的输入不作反应。
function numbersonly(field,event){
var key,keychar;
if(window.event){
key = window.event.keyCode;
}
else if (event){
key = event.which;
}
else{
return true
}
keychar = String.fromCharCode(key);
if((key == null)||(key == 0)||(key == 8)||(key == 9)||(key == 13)||(key == 27)){
return true;
}
else if(("0123456789.").indexOf(keychar)>-1){
window.status = "";
return true;
}
else {
window.status = "Field excepts numbers only";
return false;
}
}
Posted by chenz at May 18, 2009 10:11 AM