正则表达式只允许.net中的某些字符

时间:2010-12-06 05:34:47

标签: c# .net regex

我只是正在进行一些验证,虽然坚持这个:(我想要一个只包含[a-z] [A-Z] [0-9] [_]的文字。

它应该以任何顺序接受任何上述字符。所有其他字符都将文本标记为无效。
我试过这个,但它没有用!

  {
        ......

        Regex strPattern = new Regex("[0-9]*[A-Z]*[a-z]*[_]*");

        if (!strPattern.IsMatch(val))
        {
            return false;
        }

        return true
  }

2 个答案:

答案 0 :(得分:9)

你想要这个:

Regex strPattern = new Regex("^[0-9A-Za-z_]*$");

你的表达不起作用,因为:

  • 它将接受任意数量的数字,后跟任意数量的大写字母,后跟任意数量的小写字母,后跟任意数量的下划线。例如,后跟数字的下划线不匹配。
  • 您的模式未使用^$字符进行锚定。这意味着每个字符串都匹配,因为每个字符串包含零个或多个指定字符。 (例如,字符串“!@#$”包含零数字等等!)将表达式锚定到字符串的开头和结尾意味着整个字符串整个匹配表达式或匹配将失败。
  • 此模式仍将接受零长度字符串作为有效字符串。如果您希望强制该字符串至少为一个字符,请将表达式末尾附近的*更改为+。 (*表示“前一个令牌中的0个或更多”,而+表示“前一个令牌中的一个或多个”。)

答案 1 :(得分:0)

试试这个:

new Regex("[0-9A-Za-z_]*");