不過還是不要為了用 RegularExpressionValidator 而用, 以免為了兜出想要的 ValidationExpression 而傷透腦筋. 舉例來說, 設計一個只允許數字的輸入欄, 我們可以用以下兩種做法:
- 使用 RegularExpressionValidator, 並設定適合的 ValidationExpression 屬性.
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="只允許數字" ValidationExpression="^[\d]+$" ControlToValidate="TextBox1" Display="Dynamic"> </asp:RegularExpressionValidator>
- 使用 CompareValidator, 並設定 Operator="DataTypeCheck", 來做輸入欄位的型態檢查.
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="只允許數字" Operator="DataTypeCheck" ControlToValidate="TextBox1" Type="Integer" Display="Dynamic"> </asp:CompareValidator>
這時候 RegularExpressionValidator 就顯得比較有利, 只要修改一下 ValidationExpression="^([1-9][\d]*)|(0)$", 就可以排除掉第一位數為 0 的輸入值.
不過, 若將上面的例子修改一下, 只允許數字, 但要排除掉 999 這個值.
這時候 CompareValidator 又顯得比較方便了, 參考如下:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="只允許數字(除了999)" ControlToValidate="TextBox1" Type="Integer" Operator="NotEqual" ValueToCompare="999" Display="Dynamic"> </asp:CompareValidator>用 RegularExpressionValidator 就有點麻煩了, 要利用到 (?!).
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="只允許數字(除了999)" ValidationExpression="^(?!^999$)([1-9][\d]*)|(0)$" ControlToValidate="TextBox1" Display="Dynamic"> </asp:RegularExpressionValidator>接下來, 假設有一種情境, 是在申請帳號的地方, 我們不希望使用者輸入 admin 或 guest.
若用 CompareValidator 就沒辦法了, 因為要判斷的是兩個字串.
不過我們可以藉由修改上述的 RegularExpressionValidator, 來達到這樣的目的.
其中, 我僅限制使用者輸入小寫的 a-z, 以及數字 0-9, 且第一字元不可是數字.
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="輸入錯誤(不允許admin/guest)" ValidationExpression="^(?!^((admin)|(guest))$)[a-z][a-z0-9]+$" ControlToValidate="TextBox1" Display="Dynamic"> </asp:RegularExpressionValidator>結論:
透過 (?!) 或 (?=), 我們可以判斷使用者輸入的資料是否為我們要的, 進而接受或排除掉.
不過, 可惜的是 (?i) 這個不區分大小寫的用法, 在 Javascript 中不支援.
所以若要在 RegularExpressionValidator 中, 設定不區分大小寫, 需要將 EnableClientScript 設定成 false, 然後在 Server 端去判斷.
參考如下:
.aspx檔:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="TextBox1" runat="server" ErrorMessage="輸入錯誤(不允許admin/guest)" Display="Dynamic" ValidationExpression="^(?!(?i)^((admin)|(guest))$)[a-zA-Z][a-zA-Z0-9]+$" EnableClientScript="False"> </asp:RegularExpressionValidator> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />.cs檔:
protected void Button1_Click(object sender, EventArgs e) { if(this.RegularExpressionValidator1.IsValid) { //... } }
沒有留言:
張貼留言