使MaskedEditExtender Mask可选

时间:2015-09-01 19:26:50

标签: asp.net regex masking

这里我有一个MaskedEditExtender,带有使用正则表达式的验证器 它验证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>

问题是:正如您在正则表达式中看到的那样,用户可以在&#39;)之间放置4或5位数字。和&#39; - &#39; 但是&#34;面具&#34;字段不允许。

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

2 个答案:

答案 0 :(得分:1)

好吧,似乎MaskedEditExtender中没有这样的功能允许你放置少于掩码中的字符,所以我做了一个小的解决方法:
我已经在掩码中放置了自动完成功能,修改了正则表达式以接受字符串末尾的空白空间,并在每次我想使用TextBox的值时修剪它。

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

这样,所有未填充的字符将被替换为字符串末尾的空格,正则表达式将负责验证,Trim()将删除空格。这样就可以让Mask的长度可选。

答案 1 :(得分:0)

ClearMaskOnLostFocus="true"上设置MaskedEditExtender