使 MaskedEditExtender Mask 可选

Make MaskedEditExtender Mask optional

这里我有一个 MaskedEditExtender,带有一个使用正则表达式的验证器。
它验证 phone 个 8 或 9 位数字:

<asp:TextBox Style="width: 135px" ID="txtTelefone" runat="server"></asp:TextBox>
<ajaxToolkit:MaskedEditExtender
    ID="MaskedEditExtender_Telefone"
    TargetControlID="txtTelefone"
    runat="server"
    Mask="\(99\)9999NN9999"
    OnInvalidCssClass="txt-TextBox-Error"
    ValidateRequestMode="Enabled"
    ErrorTooltipEnabled="True"
    Filtered="-"
    PromptCharacter=" "
    ClearMaskOnLostFocus="false"/>
<ajaxToolkit:MaskedEditValidator
    ID="MaskedEditValidator_Telefone"
    runat="server"
    ControlExtender="MaskedEditExtender_Telefone"
    ControlToValidate="txtTelefone"
    ValidationExpression="^\(\d\d\)\d\d\d\d+-\d\d\d\d$"
    Display="Dynamic"></ajaxToolkit:MaskedEditValidator>

问题是:如您在正则表达式中所见,用户可以在“)”和“-”之间放置 4 或 5 个数字。
但是 "Mask" 字段不允许。

我需要 MaskedEditExtender 在我没有键入所有字符时停止哭泣,因为它们不是必需的。我需要验证我的字段的是正则表达式。
MaskedEditExtender 只是为了提供一个掩码,允许我只键入数字并在开头有一个 (99)。它不需要验证任何东西。

好吧,似乎 MaskedEditExtender 中没有这样的功能可以让您在掩码中放置少于字符,所以我做了一个小的解决方法:
我已将自动完成放在掩码中,调整正则表达式以在字符串末尾接受一个空 space 并在每次我想使用 TextBox 的值时对其进行修剪。

  • MaskedEditValidator中:ValidationExpression="^\(\d{2}\)\d{4,5}-\d{4} *$"
  • MaskedEditExtender中:AutoComplete="true" AutoCompleteValue=""
  • CodeBehind 中:txtTelefone.Text.Trim();

有了这个,所有未填充的字符将被替换为字符串末尾的 space,正则表达式将负责验证,Trim() 将删除 space秒。因此允许您将掩码的长度设为可选。

MaskedEditExtender 上设置 ClearMaskOnLostFocus="true"