如何验证字符串只允许其中包含字母数字字符?

mrb*_*lah 110 c# regex

如何使用正则表达式验证字符串只允许其中包含字母数字字符?

(我也不想允许任何空格).

jga*_*fin 193

在.NET 4.0中,您可以使用LINQ:

if (yourText.All(char.IsLetterOrDigit))
{
    //just letters and digits.
}
Run Code Online (Sandbox Code Playgroud)

yourText.All因为合同无法履行,将停止执行并返回false第一次char.IsLetterOrDigit报告.falseAll

注意!这个答案并没有严格检查字母数字(通常是AZ,az和0-9).这个答案允许本地人物喜欢åäö.

更新2018-01-29

上述语法仅在使用具有正确类型的单个参数的单个方法时才有效(在本例中char).

要使用多个条件,您需要这样写:

if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
Run Code Online (Sandbox Code Playgroud)

  • 最优雅,最不容易出错的解决方案. (8认同)
  • 现在,这只是美丽,简单而简单. (3认同)
  • 如果你想确保你的文字肯定是字母数字,这不会失败吗?它可以是所有数字或所有字母,但仍满足此条件. (3认同)
  • 我认为这个答案完全错误,假设字母数字集是 AZ、az 和 0-9,因为这涵盖了整个 Unicode 字母和数字范围,其中也包括非拉丁字符。例如,`char.IsLetterOrDigit('ก')` 将返回 `true`。http://csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8ca (3认同)
  • @itsbalur:是的,但这不是问题。 (2认同)

cle*_*tus 170

使用以下表达式:

^[a-zA-Z0-9]*$
Run Code Online (Sandbox Code Playgroud)

即:

using System.Text.RegularExpressions;

Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 我讨厌正则表达式.我知道我永远不会记住语法.即使我研究它,也会很快再次被遗忘. (14认同)
  • 如果您清理数据库名称或内部类似的东西,如果它不在英语国家运行,您将不在乎. (4认同)
  • 有人说:“如果使用正则表达式解决问题,那么就会有两个问题。” (3认同)

JP *_*oto 34

您可以使用扩展功能而不是正则表达式轻松完成...

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

    for (int i = 0; i < str.Length; i++)
    {
        if (!(char.IsLetter(str[i])) && (!(char.IsNumber(str[i]))))
            return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

每个评论:) ...

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

    return (str.ToCharArray().All(c => Char.IsLetter(c) || Char.IsNumber(c)));
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对于除a-zA-Z之外的"字母",Char.IsLetter将评估为true.例如,日语あ,Chinese's,Korean한等被认为是Unicode"字母".如果这是你的意图,那么很好,但从其他答案中的各种正则表达式来判断,这可能不是最常被认为是alpha [数字]. (4认同)
  • 我认为我们想要在这种情况下使用IsDigit,而不是IsNumber - IsNumber将为数字返回true,或者*看起来像数字的数字(分数,罗马数字等;请参阅http:// msdn.microsoft.com/en-us/library/yk2b3t2y.aspx).鉴于此,如果感觉特别邪恶,可以进一步压缩IsAlphaNum的内容:return string.IsNullOrEmpty(str)?false:str.ToCharArray().All(Char.IsLetterOrDigit); (3认同)
  • 这可能是一个品味问题,但我会将循环表达为"foreach(char c in str){...}".是否将空字符串视为正常取决于应用程序,因此我会将其取出.我也不会将6条空行填充到这样一个简单的例程中,但我猜这是C#/ Java/C++风格 - 编码器似乎是通过屏幕空间来支付的.无论如何,这是正确的方向,所以+1. (2认同)

kyo*_*ryu 17

虽然我认为基于正则表达式的解决方案可能就是我的方式,但我很想将其封装在一个类型中.

public class AlphaNumericString
{
    public AlphaNumericString(string s)
    {
        Regex r = new Regex("^[a-zA-Z0-9]*$");
        if (r.IsMatch(s))
        {
            value = s;                
        }
        else
        {
            throw new ArgumentException("Only alphanumeric characters may be used");
        }
    }

    private string value;
    static public implicit operator string(AlphaNumericString s)
    {
        return s.value;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当你需要一个经过验证的字符串时,你可以让方法签名需要一个AlphaNumericString,并且知道如果你得到一个,它就是有效的(除了空值).如果有人试图传入未经验证的字符串,则会生成编译器错误.

如果你愿意的话,你可以更好地实现所有的相等运算符,或者从普通的ol'字符串显式转换为AlphaNumericString.


goo*_*eye 8

我需要检查AZ,az,0-9; 没有正则表达式(即使OP要求正则表达式).

在这里混合各种答案和评论,以及来自/sf/answers/698298541/的讨论,这可以测试字母或数字,避免使用其他语言字母,并避免使用其他数字,例如分数字符.

if (!String.IsNullOrEmpty(testString)
    && testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
    // Alphanumeric.
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*ton 5

^\w+$ 将会允许 a-zA-Z0-9_

使用^[a-zA-Z0-9]+$不允许下划线。

请注意,这两个都要求字符串不能为空。使用*代替+允许空字符串。