关于验证

记录一些简单的验证

js端验证电话号码:

  var Phone=$("#Phone").val();
if (Phone.length>0 && Phone.length < 50){
               var pattern =/(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/;    
                 if(!pattern.exec(Phone))
                 {
                   alert(“电话号码格式不正确”);
                   return;
                 }

相应的C#服务端,电话验证
 if (!String.IsNullOrEmpty(addressInfo.ReceivePhone))
        {
           bool isVaildatePhone = System.Text.RegularExpressions.Regex.IsMatch(addressInfo.ReceivePhone, 
                  @"(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)");
           if (!isVaildatePhone) 
           {
              response.write("电话号码格式不正确");
              return;
            }

        }

 

一些常用的js验证

//检查字符是否为空
function IsNullOrEmpty(val) {
    if (val == "" || val.length == 0)
        return true;
    else
        return false;
}

//获取对应的正则字符
function GetRegString(key) {
    var stringKey = "";
    switch (key) {
        case "Reg_MobelPhone": //手机号码
            stringKey = "^0{0,1}(13[0-9]|15[7-9]|153|156|186|187|188|189)[0-9]{8}{1}quot;;
            break;
        case "Reg_CH": //中文汉字
            stringKey = "[\u4e00-\u9fa5]{0,}{1}quot;;
            break;
        case "Reg_Email": //是否邮件格式
            stringKey = "^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*{1}quot;;
            break;
        case "Reg_Decimal_n_2": //只允许带2位小数
            stringKey = "^[+-]?\d+.\d{1,2}{1}quot;;
            break;
        case "Reg_Decimal_0_2": //只允许2位小数 不允许超过1
            stringKey = "[0].\d{1,2}|[1]";
            break;
        case "Reg_Integer": //是否整形 ^[-\+]?\d+$
            stringKey = "^[+-]?\d+{1}quot;;
            break;
        case "Reg_Number": //是否数字字符串 可带正负号 等价于^[+-]?\d+[.]?\d+$
            stringKey = "^[+-]?[0-9]+[.]?[0-9]+{1}quot;;
            break;
        case "Reg_Phone": //验证电话号码或传真号码
            stringKey = "^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}{1}quot;;
            break;
        case "Reg_EngOrNum": //字母或数字
            stringKey = "^[A-Za-z0-9-]+{1}quot;;
            break;
        case "Reg_Username ": //以字母开头,长度在6-18之间,只能包含字符,数字和下划线,通常用于检测用户名
            stringKey = "^[a-zA-Z]\w{5,17}{1}quot;;
            break;
        case "Reg_Password": //由数字、字母或者下划线组成,不限定长度
            stringKey = "^\w+{1}quot;;
            break;
        case "Reg_Website": //验证InternetURL
            stringKey = "^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?{1}quot;;
            break;
        case "Reg_UnSaveString ": //验证是否含有^%&',;=? $等非法字符
            stringKey = "[^%&',;=? $\x22]+";
            break;
        case "Reg_TelorFax": //验证电话号码或传真号码
            stringKey = "^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}{1}quot;;
            break;
        case "Reg_PostCode": //验证邮政编码(4到6位数字)
            stringKey = "^\d{4,6}{1}quot;;
            break;
        case "Reg_IdCard": //身份证
            stringKey = "^\d{15}|\d{18}{1}quot;;
            break;
        case "Reg_PicPostfix": //图片后缀
            stringKey = "\.(?i:gif|jpg){1}quot;;
            break;
        case "Reg_Date": //正则表达式日期字符串(2008-05-08)
            stringKey = "^((((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-9]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)){1}quot;;
            break;
        case "Reg_Date_2": //正则表达式日期字符串(2008/05/08)
            stringKey = "^((((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-9]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))/0?2/29/)){1}quot;;
            break;
        case "Reg_Time": //时间字符串(15:00:00)
            stringKey = "^((20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d){1}quot;;
            break;
        case "Reg_Phone": //验证电话号码或传真号码
            stringKey = "^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}{1}quot;;
            break;
        case "Reg_MobelPhone": //验证手机号码
            stringKey = "^0{0,1}(13[0-9]|15[7-9]|153|156|18[7-9])[0-9]{8}{1}quot;;
            break;
        case "Reg_TextDate_8": //验证文本类型的日期,8位,比如:1984;198403;19840505,因为是文本型,所以不对日期做精确校验,只要格式对就行
            stringKey = "^((1[6-9]|[2-9]\d)\d{2})((0[1-9]|1[0-2]))?((0[1-9]|1[0-9]|2[0-9]|3[0-1]))?{1}quot;;
            break;
        case "Reg_TextDate_10": //验证文本类型的日期,10位,比如:1984;1984-03;1984-05-05,因为是文本型,所以不对日期做精确校验,只要格式对就行
            stringKey = "^((1[6-9]|[2-9]\d)\d{2})(-(0[1-9]|1[0-2]))?(-(0[1-9]|1[0-9]|2[0-9]|3[0-1]))?{1}quot;;
            break;
    }
    return stringKey;
}

//验证普通正则表达式的方法
function CheckFormatRegex(regexStr, value) {
    var regex = new RegExp(regexStr);
    if (regex.test(value)) {
        return true;
    }
    else {
        return false;
    }
}

//处理错误、并把错误信息显示在后面
function CheckFormatRegexDisplayText(regexStr, value, displayId, errorMessage) {
    var regex = new RegExp(regexStr);
    if (regex.test(value)) {
        $(displayId).html("");
    }
    else {
        $(displayId).html(errorMessage);
    }
}

//处理错误、并把错误信息显示在后面、传控件本身
function CheckFormatRegexDisplayTextAndControl(regexStr, control, displayId, successMsg, errorMessage) {
    var regex = new RegExp(GetRegString(regexStr));
    //alert(control.value);
    if (regex.test(control.value)) {
        $(displayId).html(successMsg);
    }
    else {
        $(displayId).html(errorMessage);
    }
}

//处理错误、并把错误信息返回、传控件Id
function CheckFormatRegexRetrunMessageByControl(regexStr, controlId, displayId, successMsg, errorMessage) {
    var regex = new RegExp(GetRegString(regexStr));
    //alert(control.value);
    if (regex.test(document.getElementById(controlId).value)) {
        return successMsg;
    }
    else {
        return errorMessage;
    }
}

//处理错误、并把错误信息返回、传控件的值
function CheckFormatRegexRetrunMessageByValue(regexStr, value, displayId, successMsg, errorMessage) {
    var regex = new RegExp(GetRegString(regexStr));
    //alert(control.value);
    if (regex.test(value)) {
        return successMsg;
    }
    else {
        return errorMessage;
    }
}

//文本框方式 用法一
function checkMobile() {
    var phone = document.getElementById("txtmobile").value;
    alert(CheckFormatRegex(Reg_MobelPhone, phone));
}

//文子提示方式 用法二
function checkMobileDisplayText() {
    var phone = document.getElementById("txtmobile").value;
    CheckFormatRegexDisplayText(Reg_MobelPhone, phone, "#txtmobileMsg", "手机格式不正确....");
}

//文子提示方式 用法三
function checkMobileDisplayText(val) {
    var hello = val;
    alert(hello.value);
    var phone = document.getElementById("txtmobile").value;
    CheckFormatRegexDisplayText(Reg_MobelPhone, phone, "#txtmobileMsg", "手机格式不正确....");
}

//用法四 ):<input type="text" id="txtmobile" οnblur="CheckFormatRegexDisplayTextAndControl('Reg_MobelPhone',this,'#txtmobileMsg2','ok','手机格式不正确...')" /><span id="txtmobileMsg2"></span>


例如:要截取多个<ul>的代码:

public string GetString(string StrReturn)
{
   string matchstring = @"<ul.*(.|\n)*</ul>?";
   Regex regex = new Regex(matchstring,RegexOptions.IgnoreCase);
  if (Regex.IsMatch(StrReturn,matchstring))
  {
    MatchCollection matches = regex.Matches(StrReturn);
     if (matches.Count > 0)
       StrReturn = matches[0].Value;
   }
  return StrReturn ;
}

如果只取一个<ul>则可用:
string matchstring = @"<ul.*(.|\n)*?</ul>?";
这涉及到贪婪与懒惰:


当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:

a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

为什么第一个匹配是aab(第一到第三个字符)而不是ab(第二到第三个字符)?简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。
表5.懒惰限定符 代码/语法     说明
*?     重复任意次,但尽可能少重复
+?     重复1次或更多次,但尽可能少重复
??     重复0次或1次,但尽可能少重复
{n,m}?     重复n到m次,但尽可能少重复
{n,}?     重复n次以上,但尽可能少重复


js端关于身份证的验证:

function CheckCertificateValue(obj)
   {
      var value=$.trim(obj);      
      if(value.length==18)
      {
         var jq="7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2"
         var code="10X98765432";
         var sum=0
         for(var i=0;i<17;i++)
         {
            sum+=value.charAt(i)*jq.split(",")[i];
         }
         if(value.charAt(17).toUpperCase()==code.charAt(sum%11)&&sum.toString()!='NaN')
         {
           return true;
         }         
      }
      return false;
   }

服务器端关于身份证的验证:

 public static bool IsCertificateValue(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                return false;
            }
            int[] jq = new int[17] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
            string code = "10X98765432";
            if (id.Length == 18)
            {
                int sum = 0;
                for (int i = 0; i < 17; i++)
                {
                    int temp = 0;
                    if (!int.TryParse(id[i].ToString(), out temp))
                    {
                        return false;
                    }
                    sum += temp * jq[i];
                }
                if (id[17].ToString().ToUpper()[0] == code[sum % 11])
                {
                    return true;
                }
            }
            return false;
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值