从阿里妈妈发现的几个不错的表单验证函数

  //--------

  // 检查当前浏览器是否为Netscape

  //--------

  function isNetscape(){

  app=navigator.appName.substring(0,1);

  if (app=='N') return true;

  else {return false;}

  }

  //--------

  // 保存当前Form表单(仅适用于IE浏览器)

  //--------

  function formSaveCheck(fileName){

  if(isNetscape()){alert("Sorry, these function is not supported")}

  else document.execCommand('SaveAs',null,fileName)

  }

  //--------

  // 校验数据的合法性

  //--------

  function isValidReg( chars){

  var re=/<|>|\[|\]|\{|\}|『|』|※|○|●|◎|§|△|▲|☆|★|◇|◆|□|▼|㊣|﹋|⊕|⊙|〒|ㄅ|ㄆ|

  ㄇ|ㄈ|ㄉ|ㄊ|ㄋ|ㄌ|ㄍ|ㄎ|ㄏ|ㄐ|ㄑ|ㄒ|ㄓ|ㄔ|ㄕ|ㄖ|ㄗ|ㄘ|ㄙ|ㄚ|ㄛ|ㄜ|ㄝ|ㄞ|ㄟ|ㄢ|ㄣ|ㄤ|ㄥ|ㄦ|ㄧ|ㄨ|ㄩ

  |■|▄|▆|\*|@|#|\^|\\/;

  if (re.test( chars) == true) {

  return false;

  }else{

  return true;

  }

  }

  //--------

  // 检查数据的长度是否合法

  //--------

  function isValidLength(chars, len) {

  if (chars.length > len) {

  return false;

  }

  return true;

  }

  //--------

  // 校验URL的合法性

  //--------

  function isValidURL( chars ) {

  //var re=/^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)((((\w+(-*\w*)+)\.)+((com)|

  (net)|(edu)|(gov)|(org)|(biz)|(aero)|(coop)|(info)|(name)|(pro)|(museum))(\.([a-z]{2}))?)|((\w+(-

  *\w*)+)\.(cn)))$/;

  var re=/^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(\S+\.\S+)$/;

  //var re=/^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(((((\w+(-*\w*)+)\.)+((com)|

  (net)|(edu)|(gov)|(org)|(biz)|(aero)|(coop)|(info)|(name)|(pro)|(museum)|(cn)|(tv)|(hk))(\.([a-z]

  {2}))?)|((\w+(-*\w*)+)\.(cn)))((\/|\?)\S*)*)$/;

  if (!isNULL(chars)) {

  chars = jsTrim(chars);

  if (chars.match(re) == null)

  return false;

  else

  return true;

  }

  return false;

  }

  //--------

  // 校验数字的合法性

  //--------

  function isValidDecimal( chars ) {

  var re=/^\d*\.?\d{1,2}$/;

  if (chars.match(re) == null)

  return false;

  else

  return true;

  }

  //--------

  // 校验数字的合法性

  //--------

  function isNumber( chars ) {

  var re=/^\d*$/;

  if (chars.match(re) == null)

  return false;

  else

  return true;

  }

  //--------

  // 校验邮编的合法性

  //--------

  function isValidPost( chars ) {

  var re=/^\d{6}$/;

  if (chars.match(re) == null)

  return false;

  else

  return true;

  }

  //--------

  // 去掉数据的首尾空字符

  //--------

  function jsTrim(value){

  return value.replace(/(^\s*)|(\s*$)/g,"");

  }

  //--------

  // 校验数据是否为空(当数据为空字符时也为NULL)

  //--------

  function isNULL( chars ) {

  if (chars == null)

  return true;

  if (jsTrim(chars).length==0)

  return true;

  return false;

  }

  //--------

  // 校验Email的合法性

  //--------

  function checkEmail (fieldName, bMsg)

  {

  var emailStr = fieldName.value;

  var emailPat=/^(.+)@(.+)$/

  var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"

  var validChars="\[^\\s" + specialChars + "\]"

  var quotedUser="(\"[^\"]*\")"

  var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/

  var atom=validChars + '+'

  var word="(" + atom + "|" + quotedUser + ")"

  var userPat=new RegExp("^" + word + "(\\." + word + ")*$")

  var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

  var matchArray=emailStr.match(emailPat)

  if (matchArray==null)

  {

  if (bMsg) alert("Email address seems incorrect (check @ and .'s)")

  return false

  }

  var user=matchArray[1]

  var domain=matchArray[2]

  // See if "user" is valid

  if (user.match(userPat)==null)

  {

  if (bMsg) alert("The Email address seems incorrect.")

  // fieldName.focus();

  return false

  }

  /* if the e-mail address is at an IP address (as opposed to a symbolic

  host name) make sure the IP address is valid. */

  var IPArray=domain.match(ipDomainPat)

  if (IPArray!=null)

  {

  for (var i=1;i<=4;i++)

  {

  if (IPArray[i]>255)

  {

  if (bMsg) alert("Destination IP address is invalid!")

  return false

  }

  }

  return true

  }

  // Domain is symbolic name

  var domainArray=domain.match(domainPat)

  if (domainArray==null)

  {

  if (bMsg) alert("The domain name doesn't seem to be valid.")

  return false

  }

  /* domain name seems valid, but now make sure that it ends in a

  three-letter word (like com, edu, gov) or a two-letter word,

  representing country (uk, nl), and that there's a hostname preceding

  the domain or country. */

  var atomPat=new RegExp(atom,"g")

  var domArr=domain.match(atomPat)

  var len=domArr.length

  if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3)

  {

  // the address must end in a two letter or three letter word.

  if (bMsg) alert("The address must end in a three-letter domain, or two letter country.")

  return false

  }

  // Make sure there's a host name preceding the domain.

  if (len<2)

  {

  if (bMsg) alert("This address is missing a hostname!")

  return false

  }

  // If we've got this far, everything's valid!

  return true;

  }

  //--------

  // 判断是否为闰年

  //--------

  function isLeapYear(year){

  if (year % 4 != 0)

  return false;

  if (year % 400 == 0)

  return true;

  if (year % 100 == 0)

  return false;

  return true;

  }

  //--------

  // 校验日期的合法性

  //--------

  function validateDate(day,month,year)

  {

  if ((day<=0)||(month<=0)||(year<=0))

  return false;

  if ((month>=1)&&(month<=12)) {

  if (month == 2) {

  if (isLeapYear(year)) {

  if (day<=29)

  return true;

  } else {

  if (day<=28)

  return true;

  else

  return false;

  }

  } else if ((month==4)||(month==6)||(month==9)||(month==11)) {

  if (day<=30)

  return true;

  else

  return false;

  } else {

  if (day<=31)

  return true;

  else

  return false;

  }

  }

  return false;

  }

  //--------

  // 判断数据是否包含都是Single Byte

  //--------

  function isSingleByteString(str)

  {

  var rc = true;

  var j = 0, i = 0;

  for (i=0; i<str.length; i++) {

  j = str.charCodeAt(i);

  if (j>=128) {

  rc = false;

  break;

  }

  }

  return rc;

  }

  var submitEvent = true;

  function checkDoubleSubmit(){

  return submitEvent;

  }

  //--------

  // 弹出窗口

  // 参数:url-弹出窗口显示URL的内容

  //       w-弹出窗口的宽度

  //       h-弹出窗口的高度

  //       isCenter-控制弹出窗口是否在屏幕中央显示,值为true/false

  //       isResizable-控制弹出窗口是否可以改变大小,值为true/false

  //       isScroll-控制弹出窗口是否有滚动条,值为true/false

  //--------

  function popupWindow(url,w,h,isCenter,isResizable,isScroll) {

  if (isNULL(url)) return;

  var scrLeft = 0;

  var scrTop = 0;

  var scroll = "no";

  var resize = "no";

  if (isCenter) {

  scrLeft = (screen.width-w)/2;

  scrTop = (screen.height-h)/2;

  }

  if (isResizable) resize="yes";

  if (isScroll) scroll = "yes";

  window.open(url, 'popupWindow',

  'height='+h+',width='+w+',top='+scrTop+',left='+scrLeft+',toolbar=no,menubar=no,scrollbars='+scrol

  l+',resizable='+resize+',location=no,status=no');

  }

  //--------

  // 弹出窗口

  // 参数:url-弹出窗口显示URL的内容

  //       w-弹出窗口的宽度

  //       h-弹出窗口的高度

  //       isCenter-控制弹出窗口是否在屏幕中央显示,值为true/false

  //       isResizable-控制弹出窗口是否可以改变大小,值为true/false

  //       isModal-控制弹出窗口是否为模式或非模式对话框,值为ture/false

  //--------

  function popupModalWindow(url,w,h,isCenter,isResizable,isModal) {

  if (isNULL(url)) return;

  var scrLeft = 0;

  var scrTop = 0;

  var resize = "no";

  var cnt = "no";

  if (isCenter) {

  cnt="yes";

  scrLeft = (screen.width-w)/2;

  scrTop = (screen.height-h)/2;

  }

  if (isResizable) resize="yes";

  if (isModal)

  window.showModalDialog(url, 'popupWindow',

  'dialogWidth:'+w+'px;dialogHeight:'+h+'px;dialogLeft:'+scrLeft+'px;dialogTop:'+scrTop+'px;center:'

  +cnt+';help:no;resizable:'+resize+';status:no');

  else

  window.showModelessDialog(url, 'popupWindow',

  'dialogWidth:'+w+'px;dialogHeight:'+h+'px;dialogLeft:'+scrLeft+'px;dialogTop:'+scrTop+'px;center:'

  +cnt+';help:no;resizable:'+resize+';status:no');

  }

  //--------

  // 弹出窗口

  // 参数:url-弹出窗口显示URL的内容

  //       w-弹出窗口的宽度

  //       h-弹出窗口的高度

  //       isCenter-控制弹出窗口是否在屏幕中央显示,值为true/false

  //       isResizable-控制弹出窗口是否可以改变大小,值为true/false

  //       isScroll-控制弹出窗口是否有滚动条,值为true/false

  //--------

  function openWindowCenter(urll,w,h){

  var top=(window.screen.height-h)/2;

  var left=(window.screen.width-w)/2;

  var param='toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no, status=no,top=';

  param=param+top;

  param=param+',left=';

  param=param+left;

  param=param+',height='+h;

  param=param+',width='+w;

  var w=window.open (urll,"",param)

  if(w!=null && typeof(w)!="undefined"){

  w.focus();

  }

  }

  <script language="javascript">

  function encodeHtmlForText(text){

  text = text.replace(new RegExp("&","gm"),"&");

  text = text.replace(new RegExp("<","gm"),"<");

  text = text.replace(new RegExp(">","gm"),">");

  text = text.replace(new RegExp("\'","gm"),"'");

  text = text.replace(new RegExp("\"","gm"),""");

  return text;

  }

  function encodeHtmlForURL(url){

  url = url.replace(new RegExp("<","gm"),"<");

  url = url.replace(new RegExp(">","gm"),">");

  url = url.replace(new RegExp("\'","gm"),"'");

  url = url.replace(new RegExp("\"","gm"),""");

  return url;

  }

  function title_url_change(oipt) {

  if(oipt){

  var cnt = oipt.value.length;

  if(cnt<17){

  $i("cntTitle").style.color="blue";

  $i("cntTitle").innerHTML="(您已输入"+cnt+"字)";

  }else{

  $i("cntTitle").style.color="red";

  $i("cntTitle").innerHTML="(文本超长!您已输入"+cnt+"字)";

  }

  }

  var title = $i('_fmm.t._0.ti').value;

  var clickurl = $i('_fmm.t._0.cl').value;

  title = encodeHtmlForText(title);

  clickurl = encodeHtmlForURL(clickurl);

  $i('adTitle').innerHTML = '<a href='+clickurl+'>'+title+'</a>';

  }

  function title_change() {

  var title = $i('_fmm.t._0.ti').value;

  title = encodeHtmlForText(title);

  $i('adTitle').innerHTML = title;

  }

  function description_change(oipt) {

  if(oipt){

  var cnt = oipt.value.length;

  if(cnt<33){

  $i("cntDesc").style.color="blue";

  $i("cntDesc").innerHTML="(您已输入"+cnt+"字)";

  }else{

  $i("cntDesc").style.color="red";

  $i("cntDesc").innerHTML="(文本超长!您已输入"+cnt+"字)";

  }

  }

  var desc = $i('_fmm.t._0.d').value;

  desc = encodeHtmlForText(desc);

  $i('adDesc').innerHTML = desc;

  }

  function dispurl_change() {

  var dispurl = $i('_fmm.t._0.di').value;

  dispurl = encodeHtmlForURL(dispurl);

  $i('adDispUrl').innerHTML = dispurl;

  }

  function linkurl_change() {

  var clickurl = $i('_fmm.t._0.cl').value;

  clickurl = encodeHtmlForURL(clickurl);

  $i('adClickUrl').innerHTML = clickurl;

  }

  function check_count($str){

  if (!$str) return 0;

  var $c=0;

  for (var $i=0;$i<$str.length;$i++){

  if ($str.charCodeAt($i) > 255){

  $c++;

  $c++;

  }else

  $c++;

  }

  return $c;

  }

  function validation() {

  $i('_fmm.t._0.n').value = jsTrim($i('_fmm.t._0.n').value);

  $i('_fmm.t._0.ti').value = jsTrim($i('_fmm.t._0.ti').value);

  $i('_fmm.t._0.d').value = jsTrim($i('_fmm.t._0.d').value);

  $i('_fmm.t._0.di').value = jsTrim($i('_fmm.t._0.di').value);

  $i('_fmm.t._0.cl').value = jsTrim($i('_fmm.t._0.cl').value);

  var adName = $i('_fmm.t._0.n').value;

  var adtitle = $i('_fmm.t._0.ti').value;

  var addescription = $i('_fmm.t._0.d').value;

  var addispurl = $i('_fmm.t._0.di').value;

  var adclickurl = $i('_fmm.t._0.cl').value;

  var msg="";

  $i('_fmm.t._0.t').value = jsTrim($i('_fmm.t._0.t').value);

  var tags = $i('_fmm.t._0.t').value;

  if(!isValidReg(tags)){

  msg=msg+"关键词包含非法字符!\n";

  }

  if(!isValidLength(tags,32)){

  msg=msg+"您输入的关键词长度超过限制!\n"

  }

  if(isNULL(adName)){

  msg=msg+"请输入广告名称!\n";

  }

  if(!isValidReg(adName)){

  msg=msg+"广告名称包含非法字符!\n";

  }

  if(!isValidLength(adName,16)){

  msg=msg+"输入广告名称长度超过限制!\n"

  }

  if(isNULL(adtitle)){

  msg=msg+"请输入标题内容!\n";

  }

  if(!isValidLength(adtitle,16)){

  msg=msg+"输入标题长度超过限制!\n";

  }

  if(!isValidReg(adtitle)){

  msg=msg+"标题内容包含非法字符!\n";

  }

  if(isNULL(addescription)){

  msg=msg+"请输入描述内容!\n";

  }

  if(!isValidLength(addescription,32)){

  msg=msg+"输入描述长度超过限制!\n";

  }

  if(!isValidReg(addescription)){

  msg=msg+"描述内容包含非法字符!\n";

  }

  if(isNULL(addispurl)){

  msg=msg+"请输入显示网址内容!\n";

  }

  if(!isValidLength(addispurl,1024)){

  msg=msg+"输入显示网址长度超过限制!\n";

  }

  if(!isValidURL(addispurl)){

  msg=msg+"显示网址输入不合法!\n";

  }

  if(isNULL(adclickurl)){

  msg=msg+"请输入链接网址内容!\n";

  }

  if(!isValidLength(adclickurl,512)){

  msg=msg+"输入链接网址长度超过限制!\n";

  }

  if(!isValidURL(adclickurl)){

  msg=msg+"链接网址输入不合法!\n";

  }

  if(getHostName(adclickurl)!=getHostName(addispurl)){

  msg=msg+"显示URL必须与链接URL位于同一域名下\n";

  }

  if(!isNULL(msg)){

  alert(msg);

  return false;

  }

  return true;

  }

  function getHostName(a){

  a = a.toLowerCase();

  var headlength = 0;

  if(a.indexOf("http://")==0){

  headlength = 7;

  }else if(a.indexOf("https://")==0){

  headlength = 8;

  }

  a = a.substr(headlength);

  if(a.indexOf("/")>-1){

  a = a.substr(0,a.indexOf("/"));

  }

  return a;

  }

  function addConfirm(form) {

  var isvalidate = validation();

  if(isvalidate){

  form.submit();

  }else{

  return false;

  }

  }

  function doTest() {

  var adclickurl = $i('_fmm.t._0.cl').value;

  var msg = '';

  if(isNULL(adclickurl)){

  msg=msg+"请输入链接网址内容!\n";

  }

  if(!isValidLength(adclickurl,512)){

  msg=msg+"输入链接网址长度超过限制!\n";

  }

  if(!isValidURL(adclickurl)){

  msg=msg+"链接网址输入不合法!\n";

  }

  if(!isNULL(msg)){

  alert(msg);

  return false;

  }

  popup = window.open(adclickurl, 'popupnav',

  'width=400,height=300,left=480,top=250,resizable=1,scrollbars=yes');

  return false;

  }

  function doInit() {

  var dispURL = $i('_fmm.t._0.di');

  var clickURL = $i('_fmm.t._0.cl');

  if(clickURL.value == '') {

  clickURL.value = 'http://';

  }

  if(dispURL.value == '') {

  dispURL.value = 'http://';

  }

  }

  doInit();

  </script>