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


当前回答

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

^[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";
}

其他回答

要匹配只包含这些字符(或空字符串)的字符串,请尝试

"^[a-zA-Z0-9_]*$"

这适用于。net正则表达式,可能也适用于许多其他语言。

分解一下:

^ : start of string
[ : beginning of character group
a-z : any lowercase letter
A-Z : any uppercase letter
0-9 : any digit
_ : underscore
] : end of character group
* : zero or more of the given characters
$ : end of string

如果不允许使用空字符串,请使用+而不是*。


正如其他人指出的那样,一些正则表达式语言有[a- za - z0 -9_]的速记形式。在. net正则表达式语言中,您可以打开ECMAScript行为并使用\w作为简写(生成^\w*$或^\w+$)。请注意,在其他语言中,以及在. net中默认情况下,\w范围更广,也会匹配其他类型的Unicode字符(感谢Jan指出这一点)。因此,如果您真的打算只匹配这些字符,那么使用显式(较长的)形式可能是最好的。

下面是一个正则表达式,用于使用量词指定至少1个字符且不超过255个字符

[^a-zA-Z0-9 _]{1,255}

这对我很有用。你可以试试:

[\\p{Alnum}_]

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

/^\w+$/

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

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

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

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