不過還是不要為了用 RegularExpressionValidator 而用, 以免為了兜出想要的 ValidationExpression 而傷透腦筋. 舉例來說, 設計一個只允許數字的輸入欄, 我們可以用以下兩種做法:
- 使用 RegularExpressionValidator, 並設定適合的 ValidationExpression 屬性. 12345
<
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", 來做輸入欄位的型態檢查. 12345
<
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 又顯得比較方便了, 參考如下:
1 2 3 4 5 | < 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 > |
1 2 3 4 5 6 | < 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 > |
若用 CompareValidator 就沒辦法了, 因為要判斷的是兩個字串.
不過我們可以藉由修改上述的 RegularExpressionValidator, 來達到這樣的目的.
其中, 我僅限制使用者輸入小寫的 a-z, 以及數字 0-9, 且第一字元不可是數字.
1 2 3 4 5 6 | < 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檔:
1 2 3 4 5 6 7 8 9 | < 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" /> |
1 2 3 4 5 6 7 | protected void Button1_Click( object sender, EventArgs e) { if ( this .RegularExpressionValidator1.IsValid) { //... } } |
沒有留言:
張貼留言