是否有正则表达式检查字符串是否只包含大写字母、小写字母、数字和下划线?


当前回答

这在大多数情况下都是可行的。

/^[\d]*[a-z_][a-z\d_]*$/gi

我的意思是,

abcd       True
abcd12     True
ab12cd     True
12abcd     True

1234       False

解释

^……$ -匹配模式的开始和结束 [\d]* -匹配零或多个数字 [a-z_] -匹配字母或下划线 [a-z\d_]* -匹配字母、数字或下划线 /gi -全局匹配字符串,不区分大小写

其他回答

试试我为字符串做的这些多语言扩展。

isalphannumeric—字符串必须包含至少一个alpha(在Unicode范围内的字母,在charSet中指定)和至少一个数字(在numSet中指定)。同样,字符串应该只包含alpha和数字。

IsAlpha -字符串应该包含至少一个alpha(在指定的语言字符集中),并且只由alpha组成。

IsNumeric -字符串应该至少包含一个数字(使用指定的语言numSet),并且仅由数字组成。

可以指定所需语言的charSet/numSet范围。Unicode范围可在Unicode图表。

API:

public static bool IsAlphaNumeric(this string stringToTest)
{
    // English
    const string charSet = "a-zA-Z";
    const string numSet = @"0-9";

    // Greek
    //const string charSet = @"\u0388-\u03EF";
    //const string numSet = @"0-9";

    // Bengali
    //const string charSet = @"\u0985-\u09E3";
    //const string numSet = @"\u09E6-\u09EF";

    // Hindi
    //const string charSet = @"\u0905-\u0963";
    //const string numSet = @"\u0966-\u096F";

    return Regex.Match(stringToTest, @"^(?=[" + numSet + @"]*?[" + charSet + @"]+)(?=[" + charSet + @"]*?[" + numSet + @"]+)[" + charSet + numSet +@"]+$").Success;
}

public static bool IsNumeric(this string stringToTest)
{
    //English
    const string numSet = @"0-9";

    //Hindi
    //const string numSet = @"\u0966-\u096F";

    return Regex.Match(stringToTest, @"^[" + numSet + @"]+$").Success;
}

public static bool IsAlpha(this string stringToTest)
{
    //English
    const string charSet = "a-zA-Z";

    return Regex.Match(stringToTest, @"^[" + charSet + @"]+$").Success;
}

用法:

// English
string test = "AASD121asf";

// Greek
//string test = "Ϡϛβ123";

// Bengali
//string test = "শর৩৮";

// Hindi
//string test = @"क़लम३७ख़";

bool isAlphaNum = test.IsAlphaNumeric();

这里有很多冗长的内容,我非常反对,所以,我的结论是:

/^\w+$/

\w等价于[A-Za-z0-9_],这就是你想要的(除非我们在混合中引入Unicode)。

使用+量词可以匹配一个或多个字符。如果你也想接受一个空字符串,使用*代替。

下面的正则表达式匹配字母数字字符和下划线:

^[a-zA-Z0-9_]+$

例如,在Perl中:

#!/usr/bin/perl -w

my $arg1 = $ARGV[0];

# Check that the string contains *only* one or more alphanumeric chars or underscores
if ($arg1 !~ /^[a-zA-Z0-9_]+$/) {
  print "Failed.\n";
} else {
    print "Success.\n";
}

对我来说,有一个问题,我想要区分alpha,数值和alpha数值,所以要确保一个字母数字字符串包含至少一个alpha和至少一个数值,我使用:

^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$

使用lookhead来做“至少一件”事情。相信我,这要简单得多。

下面是一个需要1-10个字符的例子,至少包含一个数字和一个字母:

^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$

注意:我本可以使用\w,但随后开始考虑ECMA/Unicode,增加了\w“字字符”的字符覆盖范围。