如题。有个项目要求很简单,就是验证输入0-9和a-z,A-Z的数字和字母。
现在的验证方法是:public static bool IsNumberOREnglish(string str)
    {
        if (Regex.IsMatch(str, @"[0-9a-zA-Z]*${1,}", RegexOptions.IgnoreCase))
            return true;
        else
            return false;
    }本来觉得没啥问题。可是,用的时候发现诸如:@!#$%^&* 此类的符号,都返回true;无语了。
一直用的都是比较简单的这种判断,可能是对正则的理解不深,请指点一下!感谢!

解决方案 »

  1.   

    if (Regex.IsMatch(str, @"^[0-9a-zA-Z]+$", RegexOptions.IgnoreCase))
      

  2.   

    其实这样就行了:public static bool IsNumberOREnglish(string str)
        {
            return Regex.IsMatch(str, @"^[0-9a-zA-Z]+$");
        }
      

  3.   

    @"[0-9a-zA-Z]*${1,}" -----@"^[0-9a-zA-Z]+$"
    这两者有啥不同么?解惑一下吧。。不是很明白呢!
    感谢!
      

  4.   


    [0-9a-zA-Z]*${1,}这正则本身就有问题,$匹配结尾,把它放那里,明显是不对的
    没有匹配开头,也就是说,少了一个^在最前面,不能达到验证的效果。
    如果你一定要用上{1,}的话,也以这样写[0-9a-zA-Z]{1,}
    因此,你可以写成^[0-9a-zA-Z]{1,}$
    这样的话,跟我上面写的那个是完全一样的。
      

  5.   

    另外,既然你已经写了a-zA-Z,那就没有必要在后面加个RegexOptions.IgnoreCase了。
    这已经把大小写全考虑进去了,不用再去忽略大小写了。