检查字符串是否仅包含字母,数字和下划线

时间:2015-12-14 10:05:24

标签: c# .net regex linq

我必须检查一个字符串是否只包含字母,数字和下划线。 这是我尝试的方式,但它不起作用:

for(int i = 0; i<=snameA.Length-1; i++)
{
    validA = validA && (char.IsLetterOrDigit(snameA[i])||snameA[i].Equals("_"));
}

6 个答案:

答案 0 :(得分:10)

您每次都要分配validA,而不检查其先前的值。现在你总是得到最后一次检查的价值。

你可以'和'结果:

validA &= (char.IsLetterOrDigit(snameA[i]) || snameA[i] == '_');

这意味着您仍然可以运行所有字符,如果第一次检查失败,这些字符可能无用。因此,如果失败则最好简单地退出:

for(int i = 0; i<=snameA.Length-1; i++)
{
    validA = (char.IsLetterOrDigit(snameA[i]) || snameA[i] == '_');

    if (!validA)
    { break; } // <-- see here
}

或者使用LINQ:

validA = snameA.All(c => char.IsLetterOrDigit(c) || c == '_');

答案 1 :(得分:10)

我喜欢Linq这样的问题:

bool validA = sname.All(c => Char.IsLetterOrDigit(c) || c.Equals('_'));

答案 2 :(得分:4)

你可以使用正则表达式

Regex regex1 = new Regex(@"^[a-zA-Z0-9_]+$");

if(regex1.IsMatch(snameA))
{

}

答案 3 :(得分:3)

您可以尝试匹配正则表达式。有一个内置类型的&#34;字母,数字和下划线&#34;,这是&#34; \ w&#34;。

Regex rgx = new Regex(@"\w*");
rgs.IsMatch(yourString);

如果您需要1个或更多,请使用&#34; \ w +&#34;。

此处提供更多信息:Regex.IsMatch

答案 4 :(得分:2)

我会使用正则表达式

string pattern = @"^[a-zA-Z0-9\_]+$";
Regex regex = new Regex(pattern);

// Compare a string against the regular expression
return regex.IsMatch(stringToTest);

答案 5 :(得分:1)

首先, letter 是一个模糊的术语:您的意思是a..zA..Z个字符或字母可能属于任何字母,例如а..яА..Я(俄语,西里尔字母)。根据您的当前实现,您需要第二个选项

循环的典型解决方案是检查直到第一个计数器示例:

  Boolean validA = true; // true - no counter examples so far

  // Why for? foreach is much readble here
  foreach(Char ch in sname) 
    // "!= '_'" is more readable than "Equals"; and wants no boxing
    if (!char.IsLetterOrDigit(ch) && ! (ch != '_')) { 
      Boolean validA = false; // counter example (i.e. non-letter/digit symbol found)

      break; // <- do not forget this: there's no use to check other characters
    }

但是,您可以使用 Linq

简化代码
  validA = sname.All(ch => Char.IsLetterOrDigit(ch) || ch == '_');

正则表达式

  validA = Regex.IsMatch(sname, @"^\w*$");