1. 程式人生 > >ASP.NET開發中主要的字元驗證方法-JS驗證、正則表示式、驗證控制元件、後臺驗證

ASP.NET開發中主要的字元驗證方法-JS驗證、正則表示式、驗證控制元件、後臺驗證

在ASP.NET開發中主要的驗證方法收藏
<1>使用JS驗證
匹配中文字元的正則表示式: [\u4e00-\u9fa5]

匹配雙位元組字元(包括漢字在內):[^\x00-\xff]
備註:可以用來計算字串的長度(一個雙位元組字元長度計2,ASCII字元計1)

匹配空白行的正則表示式:\n\s*\r
備註:可以用來刪除空白行

匹配HTML標記的正則表示式:<(\S*?)[^>]*>.*?\1>|<.*? />
備註:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的巢狀標記依舊無能為力

匹配首尾空白字元的正則表示式:^\s*|\s*$
備註:可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表示式

匹配Email地址的正則表示式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配網址URL的正則表示式:[a-zA-z]+://[^\s]*

匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

匹配國內電話號碼:\d{3}-\d{8}|\d{4}-\d{7}
備註:匹配形式如 0511-4405222 或 021-87888822

匹配騰訊QQ號:[1-9][0-9]{4,}
備註:騰訊QQ號從10000開始

匹配中國郵政編碼:[1-9]\d{5}(?!\d)
備註:中國郵政編碼為6位數字

匹配身份證:\d{15}|\d{18}
備註:中國的身份證為15位或18位

匹配ip地址:\d+\.\d+\.\d+\.\d+
備註:提取ip地址時有用

匹配特定數字:
^[1-9]\d*$    //匹配正整數
^-[1-9]\d*$   //匹配負整數
^-?[1-9]\d*$   //匹配整數
^[1-9]\d*|0$  //匹配非負整數(正整數 + 0)
^-[1-9]\d*|0$   //匹配非正整數(負整數 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮點數
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配負浮點數
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮點數
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非負浮點數(正浮點數 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮點數(負浮點數 + 0)
備註:處理大量資料時有用,具體應用時注意修正

匹配特定字串:
^[A-Za-z]+$  //匹配由26個英文字母組成的字串
^[A-Z]+$  //匹配由26個英文字母的大寫組成的字串
^[a-z]+$  //匹配由26個英文字母的小寫組成的字串
^[A-Za-z0-9]+$  //匹配由數字和26個英文字母組成的字串
^\w+$  //匹配由數字、26個英文字母或者下劃線組成的字串


<asp:Button ID="Button2" runat="server" Text="測試" OnClientClick="return checkCellPhone();" OnClick="Button2_Click" />

驗證手機的JS程式碼
    <script type="text/javascript">
         function checkCellPhone()//驗證手機
         {
            var mobile=document.getElementById ("tbMobile").value;
            if(mobile!="")
             {
                 var reg0=/^13\d{5,9}$/;   //130--139。至少7位
                  var reg1=/^153\d{4,8}$/; //聯通153。至少7位
                  var reg2=/^159\d{4,8}$/; //移動159。至少7位
                  var reg3=/^158\d{4,8}$/; //移動158。至少7位
                  if (reg0.test(mobile)||reg1.test(mobile)||reg2.test(mobile)||reg3.test(mobile))
                  {
                     return true;
                  }
                  else
                  {
                     alert("手機號格式錯誤!");
                     document.getElementById ("tbMobile").focus();
                     return false;
                  }
             }
             else
             {
                 alert("手機號不能為空!");
                  document.getElementById ("tbMobile").focus();
                  return false;
             }
         }
    </script>

      <2>使用驗證控制元件

      自定義驗證控制元件:

<asp:CustomValidator ID="CustomValidator2" runat="server" ControlToValidate="tbMobile"      ClientValidationFunction="checkCellPhone">asp:CustomValidator>

      正則表示式驗證控制元件(當然這種方法需要加入非空驗證)

<asp:RegularExpressionValidator ID="revPhone" runat="server" ControlToValidate="tbPhone" ValidationExpression="^(013|015|13|15)\d{9}$"   ErrorMessage="手機號碼格式錯誤!">asp:RegularExpressionValidator>

      <3>使用伺服器端程式驗證

        public static bool ValidatePhone(string phone)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(phone, @"^[1]+[3,5]+\d{9}");
        }

      上述的是一個簡單的應用例項,只要你知道正則表示式的寫法,你可以隨意將上面例項中的正則表示式進行替換,將一些邏輯進行修改,就能夠滿足你在驗證方面,可以說足夠滿足你常用的驗證。在這裡我也收集了一些常用的正則表示式,希望能夠對大家有所幫助。

驗證的種類:

1. 是否為空

使用ASP.NET自帶的RequiredFieldValidator控制元件

<asp:RequiredFieldValidator ID="CheckUserNotNull" runat="server" ErrorMessage="使用者名稱不能為空" ControlToValidate="txtUserName" Display="Dynamic"></asp:RequiredFieldValidator>

2. 字元長度

使用ASP.NET自帶的RegularExpressionValidator控制元件.

<asp:RegularExpressionValidator ID="CheckLength" runat="server" ControlToValidate="txtPassword" Display="Dynamic" ErrorMessage="密碼不能少於六位" ValidationExpression="[0-9,a-z,A-Z,_,@,#,$,%,^,&,*]{6,20}"></asp:RegularExpressionValidator>

<asp:RegularExpressionValidator id="revTextBox1" runat="server" ForeColor="Red" Display="Dynamic" ControlToValidate="textBox1" ValidationExpression="(\w|\W){1,100}">格式錯誤-只能輸入不超過100個字元</asp:RegularExpressionValidator>

3. 是否輸入了中文


<asp:RegularExpressionValidator ID="checkReq" runat="server" ControlToValidate="txtNumber"     Display="Dynamic" ForeColor="Red" ValidationExpression="^[\u4e00-\u9fa5]{0,}$">請輸入漢字</asp:RegularExpressionValidator>

4. 是否是數字

<asp:RegularExpressionValidator ID="CheckIsNumber" runat="server" ControlToValidate="txtWebFlow" Display="Dynamic" ErrorMessage="網站流量只能填寫數字" ValidationExpression="^[0-9]*[1-9][0-9]*$"></asp:RegularExpressionValidator>

5. 只允許輸入字母
<asp:RegularExpressionValidator ID="checkReq" runat="server" ControlToValidate="txtNumber" Display="Dynamic" ForeColor="Red" ValidationExpression="[A-Za-z]+$">請輸入英文大小寫字母</asp:RegularExpressionValidator>

6. 是否是字母、數字、下劃線

<asp:RegularExpressionValidator ID="checkReq" runat="server" ControlToValidate="txtNumber" Display="Dynamic" ForeColor="Red" ValidationExpression="^\w+$">請輸入數字字母和下劃線</asp:RegularExpressionValidator>

7. 是否是正確的E-mail格式

<asp:RegularExpressionValidator ID="CheckEmail" runat="server" ControlToValidate="txtContactMail" Display="Dynamic" ErrorMessage="電子郵箱不合法" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*"></asp:RegularExpressionValidator>

8. 是否是正確的郵政編碼格式

<asp:RegularExpressionValidator ID="checkReq" runat="server" ControlToValidate="txtNumber"     Display="Dynamic" ForeColor="Red" ValidationExpression="[1-9]\d{5}(?!\d)">您輸入的不是中國郵政編碼</asp:RegularExpressionValidator>

9. 是否是正確的電話號碼格式

<asp:RegularExpressionValidator ID="checkReq" runat="server" ControlToValidate="txtNumber" Display="Dynamic" ForeColor="Red" ValidationExpression="\d{3}-\d{8}|\d{4}-\d{7}">您輸入的電話號碼格式錯誤</asp:RegularExpressionValidator>
不涉及電話號碼是否有效。如果有相關,需要後臺配合。

10. 使用者是否存在

前臺:
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>驗證使用者是否存在</title>
<script>
function CallServer(inputcontrol,context)
{
    context.innerHTML = "載入中";
    arg = inputcontrol.value;
    <%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context")%>;
}
function ReceiveServerData(result,context)
{
    context.innerHTML = result;
}
</script>
</head>
<body>
<form id="form1" runat="server">
請輸入使用者名稱:<asp:TextBox ID="txtEnter" runat="server" onblur="CallServer(txtEnter,lblShow);"></asp:TextBox>
<asp:Label ID="lblShow" runat="server" Text=""></asp:Label>
</form>
</body>
</html>

後臺:

public partial class Callback_1 : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
    private string result;

    public void RaiseCallbackEvent(string eventArgument)
    {
        //與資料庫中使用者列表匹配,看是否存在該使用者
        bool IsExist = true;
        if (eventArgument == "test")
        {
            IsExist = true;
        }
        else
        {
            IsExist = false;
        }
        if (IsExist == true)
        {
            result = "使用者已經存在,請重新輸入使用者名稱稱.";
        }
        else
        {
            result = "使用者暫時不存在,您可以使用.";
        }
    }

    public string GetCallbackResult()
    {
        return result;
    }
}

11.兩次密碼輸入是否一致

<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToCompare="txtPassword" ControlToValidate="txtPassword1" ErrorMessage="密碼不一致" Display="Dynamic"></asp:CompareValidator>

12.身份證驗證

<asp:RegularExpressionValidator ID="checkReq" runat="server" ControlToValidate="txtNumber" Display="Dynamic" ForeColor="Red" ValidationExpression="\d{15}|\d{18}">您輸入正確的身份證號</asp:RegularExpressionValidator>

13.手機號碼驗證

<html>
<head>
<title>驗證手機號</title>
<meta http-equiv="content-Type" content="text/html;charset=gb2312">
</head>
<body>
<!--把下面程式碼加到<body>與</body>之間-->
<script>
function aa(obj)
{
if(obj.length!=11) alert("這個手機號不存在!");
else if(obj.substring(0,2)!="13") alert("這個手機號不存在!");
else if(isNaN(obj)) alert("這個手機號不存在!");
else alert("這是個正確的手機號!");
}
</script>
<form name="codeN">
請輸入手機號碼:<input type="text" name="No"><input type="button" value="驗證" onclick="aa(document.codeN.No.value)">
</form>
</body>
</html>

<asp:RegularExpressionValidator ID="checkReq" runat="server" ControlToValidate="txtNumber" Display="Dynamic" ForeColor="Red" ValidationExpression="^(013|015|13|15)\d{9}$">您輸入正確的手機號碼</asp:RegularExpressionValidator>

----------------------------------------------------------------
需要注意的問題:

1. 防註冊機器人.使用隨機驗證碼

2. 防文字框擴充套件操作:

不允許複製、剪下、貼上

<asp:TextBox ID="txtPassword" runat="server" MaxLength="20" oncopy="return false;" oncut="return false;" onpaste="return false;" TextMode="Password" Width="142px"></asp:TextBox>

3. 傳引數相關的問題:需要對資料進行加密解密。


4. 防SQL注入:使用儲存過程或者SqlParameter。

5. 將asp.net驗證與ajaxControlToolKit結合使用:

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtAdminName" Display="None" ErrorMessage="名稱請不要為空"></asp:RequiredFieldValidator>
<cc1:ValidatorCalloutExtender ID="ValidatorCalloutExtender1" runat="server" TargetControlID="RequiredFieldValidator1"></cc1:ValidatorCalloutExtender>

這樣在出現空格時,會在txtAdminName文字框旁邊出現動態提示。

6. 按回車鍵,游標移至下一個文字框:按文字框順序設定TabIndex屬性.

7.最後點選提交按鈕.觸發提交事件:在from中,設定DefaultButton值為提交按鈕id.