检查c#中字符串中的字母数字字符

时间:2011-05-31 05:31:34

标签: c#

我使用了以下代码,但它返回false但它应该返回true

string check,zipcode;
zipcode="10001 New York, NY";
check=isalphanumeric(zipcode)

public static Boolean isAlphaNumeric(string strToCheck)
{
    Regex rg = new Regex("[^a-zA-Z0-9]");

    //if has non AlpahNumeric char, return false, else return true.
    return rg.IsMatch(strToCheck) == true ? false : true;
}

8 个答案:

答案 0 :(得分:48)

试试这个:

public static Boolean isAlphaNumeric(string strToCheck)
{
    Regex rg = new Regex(@"^[a-zA-Z0-9\s,]*$");
    return rg.IsMatch(strToCheck);
}

如果你在正则表达式中指定,你的字符串应该包含什么,而不是它不能包含的内容,那就更难以理解了。

在上面的示例中:

  • ^ - 表示字符串的开头
  • [] * - 括号内可包含任意数量的字符
  • a-zA-Z0-9 - 任何字母数字字符
  • \ s - 任何空格字符(空格/制表符等)
  • , - 逗号
  • $ - 字符串结尾

答案 1 :(得分:30)

    public static bool IsAlphaNumeric(string strToCheck)
    {
        return strToCheck.All(char.IsLetterOrDigit);
    }

答案 2 :(得分:5)

10001 New York, NY包含逗号和空格 - 而不是字母数字

您需要调整表达式以允许使用逗号和空格。

此外,您可能希望重命名该函数,以便其他开发人员明白它更像是一个验证器而不是isAlphaNumeric()函数。

答案 3 :(得分:2)

如果要检查非正则ASCII A-z 0-9,则不能使用char.IsLetterOrDigit(),因为它包括其他Unicode字符。

您可以做的是检查字符代码范围。

  • 48-> 57是数字
  • 65-> 90是大写字母
  • 97-> 122是小写字母

以下内容比较冗长,但这是为了易于理解,而不是为了打高尔夫。

    public static bool IsAsciiAlphaNumeric(this string str)
    {
        if (string.IsNullOrEmpty(str))
        {
            return false;
        }

        for (int i = 0; i < str.Length; i++)
        {
            if (str[i] < 48) // Numeric are 48 -> 57
            {
                return false;
            }

            if (str[i] > 57 && str[i] < 65) // Capitals are 65 -> 90
            {
                return false;
            }

            if (str[i] > 90 && str[i] < 97) // Lowers are 97 -> 122
            {
                return false;
            }

            if (str[i] > 122)
            {
                return false;
            }
        }

        return true;
    }

答案 4 :(得分:1)

当^在[]中时,它表示除了这些字符之外的所有内容。

答案 5 :(得分:1)

我需要一种方法来查看字符串是否包含任何Alpha数字,而不使用正则表达式...

  public static bool ContainsAlphaNumeric(string strToCheck)
        {
            foreach(char c in strToCheck)
            {
                if (char.IsLetterOrDigit(c))
                {
                    return true;
                }
            }
            return false;
        }

答案 6 :(得分:0)

tring check,zipcode;
zipcode="10001 New York, NY";
check=isalphanumeric(zipcode)

    public static Boolean isAlphaNumeric(string strToCheck)
            {
                Regex rg = new Regex("[^a-zA-Z0-9]");

                //if has non AlpahNumeric char, return false, else return true.
                return rg.IsMatch(strToCheck) == true ? false : true;
            }

此代码返回始终为false,因为符号^表示此字符串不包含任何字母数字字符,您需要删除此^

答案 7 :(得分:0)

回到我的perl时代,我会使用这个正则表达式:

\ W +

表示一个或多个单词字符。单词字符基本上是a-zA-Z0-9,基本上不关心标点符号或空格。所以如果你只是想确保字符串中有一些值,这就是我在C#中使用的内容:

public static Boolean isAlphaNumeric(string strToCheck)
{
    Regex rg = new Regex(@"\w+");
    return rg.IsMatch(strToCheck);
}

感谢Chopikadze的基本结构。

我认为这个会更快,因为它不会检查整个字符串,而是停留在单词字符的第一个实例并返回true。