TextBox コントロールの要件は、有効な入力として次を受け入れることでした。
- 一連の数字。
- リテラル文字列「部屋数」。
- まったく値がありません (空白のまま)。値をまったく指定しないと、RegularExpressionValidator が渡されます。
次の RegEx は、望ましい結果をもたらしました (3 種類の入力を正常に検証しました)。
"Number of rooms|[0-9]*"
しかし、「Number of rooms」という文字列が指定されているときに次の検証に失敗する理由を同僚から尋ねられたとき (要件 #2)、説明を思いつくことができませんでした。
"[0-9]*|Number of rooms"
この場合、交互の順序が重要である理由についての説明は、非常に洞察力に富んでいます。
アップデート:
2 番目の正規表現は、ここに示すように、コンソール アプリのターゲット文字列「部屋数」と正常に一致します。ただし、入力が「部屋数」の場合、aspx マークアップで同じ式を使用すると一致しません。関連する aspx マークアップは次のとおりです。
<asp:TextBox runat="server" ID="textbox1" >
</asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
EnableClientScript="false" runat="server" ControlToValidate="textbox1"
ValidationExpression="[0-9]*|Number of rooms"
ErrorMessage="RegularExpressionValidator"></asp:RegularExpressionValidator>
<asp:Button ID="Button1" runat="server" Text="Button" />