正则表达式与数字和特殊字符,但没有字母

时间:2013-12-20 14:24:33

标签: c# regex

我正在创建一个接受任何小数(0-9),+,*或#的输入的正则表达式,但不应接受任何字母(a-z)。

所以数字如

  • #192#
  • * 31#+ 32475728966
  • 0479266315
  • 32495959511

应该被接受。

当字符串中有任何字母时,正则表达式无效。

  • #192#abbef
  • a0479266315

这是我到目前为止的正则表达式:

private const string PhoneNumberRegex = "((\\d)|(\\*)|(\\#)|(\\+))?";

private bool IsValid(inputString)
{
    // Accept * # + and number
    Match match = Regex.Match(inputString, PhoneNumberRegex, RegexOptions.IgnoreCase);
    return match.Success;
}

但是这个正则表达式在#192#abbef

上也会返回true

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:10)

您可以使用:

private const string PhoneNumberRegex = @"^[0-9*#+]+$";

^$是字符串开头和结尾的锚点。

注意:不需要RegexOptions.IgnoreCase

答案 1 :(得分:3)

您需要使用^(行首)和$(行尾)锚定字符串。否则,如果任何部分匹配,则字符串匹配。

此外,您至少需要其中一个字符(您不希望匹配空字符串,因此您应该使用+(一个或多个)。

最后,您可以在所有角色中制作角色类:[\d*#+]

把它们放在一起就可以了:

private const string PhoneNumberRegex = "^[\\d*#+]+$";

这意味着从字符串的开头到结尾,您需要一个或多个列出的字符。

答案 2 :(得分:0)

我相信这会满足您的需求

private const string PhoneNumberRegex = @"^([0-9]|#|\+|\*)+$"

答案 3 :(得分:0)