TextBox只允许第一个字符作为字母,第二个作为特殊字符和休息号

时间:2015-04-24 11:22:14

标签: c# regex wpf

我希望有一个文本框,用户只能以T-12321格式输入。

  • 第一个字符:t或T
  • 第二个字符: - 或+
  • 第三个或以下字符:0 - 10(数字)

我在文本框PreviewTextInput中使用以下代码,但无法满足我的要求。任何帮助都非常感谢。

private void txtAdmitDateFrom_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    e.Handled = new Regex(@"[^0-9tT^+^\-^\/]{1}").IsMatch(e.Text);
}

2 个答案:

答案 0 :(得分:0)

[Tt]匹配大写T或小写t。请注意,单独的字符类只匹配一个字符。

@"^[Tt][+-]\d{0,10}$"

DEMO

答案 1 :(得分:0)

我花了很多时间来解释你的正则表达式有什么问题:它是一个否定的字符类,它只匹配1个不是数字的字符,而不是tT,而不是^-(您已在角色类中转义)或/。无需重复^,BTW。

我的回答:你可以使用它(如果你想在结尾允许0到10位数字):

^(?i)t[-+]\d{0,10}$

或者,如果您只需匹配010的数字:

^(?i)t[-+](?:[0-9]|10)$

代码:

e.Handled = new Regex(@"^(?i)t[-+]\d{0,10}$").IsMatch(e.Text); // or
e.Handled = new Regex(@"^(?i)t[-+](?:[0-9]|10)$").IsMatch(e.Text);

测试:

var rgx = new Regex(@"^(?i)t[-+]\d{0,10}$");
var matches = rgx.Matches("T-12321");
rgx = new Regex(@"^(?i)t[-+](?:[0-9]|10)$");
matches = rgx.Matches("T-10");

1)enter image description here 2)enter image description here