字母数字和下划线的正则expression式

我想有一个正则expression式来检查一个string是否只包含大写和小写字母,数字和下划线。

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

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

这适用于.NET正则expression式,可能还有很多其他语言。

打破它:

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

如果您不想允许空string,请使用+而不是*。

编辑正如其他人所指出的,一些正则expression式语言有[a-zA-Z0-9_]的简写forms。 在.NET正则expression式语言中,可以打开ECMAScript行为并使用\w作为简写(产生^\w*$^\w+$ )。 请注意,在其他语言中,默认在.NET中, \w稍宽一些,并且还会匹配其他种类的Unicode字符(感谢Jan指出了这一点)。 所以如果你真的打算匹配那些字符,使用显式(较长)的forms可能是最好的。

这里有很多冗长的东西,我深深反对,所以我的结论是:

 /^\w+$/ 

\w相当于[A-Za-z0-9_] ,这几乎是你想要的。 (除非我们引入unicode)

使用+量词你将匹配一个或多个字符。 如果您也想接受一个空string,请使用*

你想检查每个字符符合你的要求,这就是为什么我们使用:

 [A-Za-z0-9_] 

甚至可以使用简写forms:

 \w 

这是相同的(在一些正则expression式的味道,所以请确保你使用它之前检查)。 然后为了表明整个string必须匹配,可以使用:

 ^ 

要指示string必须以该字符开始,然后使用

 $ 

表示string必须以该字符结尾。 然后使用

 \w+ or \w* 

表示“1以上”或“0以上”。 把它放在一起,我们有:

 ^\w*$ 

嗯…问题:是否需要至less有一个字符或不是? 它可以是一个空的string?

 ^[A-Za-z0-9_]+$ 

将做至less一个大写或小写字母数字或下划线。 如果它可以是零长度,那么只需将+replace为*

 ^[A-Za-z0-9_]*$ 

编辑:

如果需要包含变音符(如cedilla – ç),那么您将需要使用与上述相同的字符,但包含变音符号:

 ^\w+$ 

要么

 ^\w*$ 

虽然它比\w更详细,但我个人感谢整个POSIX字符类名( http://www.zytrax.com/tech/web/regex.htm#special )的可读性,所以我会说:

 ^[[:alnum:]_]+$ 

然而,虽然在上述链接的文档指出\w将“匹配任何字符范围0 – 9,A – Z和a – z(相当于POSIX [:alnum:])”,我还没有发现这是真实的。 不pipe用grep -P 。 如果使用[:alnum:] ,则需要明确包含下划线,而如果使用\w则不需要。 你不能简单而甜蜜地击败以下:

 ^\w+$ 

除了可读性,使用POSIX字符类( http://www.regular-expressions.info/posixbrackets.html )意味着您的正则expression式可以在非ASCIIstring上工作,基于范围的正则expression式不会执行,因为它们依赖于可能与其他字符集不同的ASCII字符的基础sorting,因此将排除一些非ASCII字符(例如œ的字母),您可能要捕获它们。

使用lookahead做“至less一个”的东西。 相信我容易得多。

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

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

注意:可以使用\ w,但是随后ECMA / Unicode考虑因素发挥作用,增加\ w“单词字符”的字符覆盖范围。

怎么样:

 ^([A-Za-z]|[0-9]|_)+$ 

…如果你想要明确,或者:

 ^\w+$ 

…如果你更喜欢简洁(Perl语法)。

尝试一下我为string所做的这些多语言扩展。

IsAlphaNumeric – string必须包含至less1个字母(Unicode范围内的字母,在charSet中指定)和至less1个数字(在numSet中指定)。 另外,string应该只包含字母和数字。

IsAlpha – string应该包含至less1个alpha(在charSet指定的语言中)并且只包含alpha。

IsNumeric – string应该包含至less1个数字(在指定的语言numSet中)并且只包含数字。

可以指定所需语言的charSet / numSet范围。 Unicode范围可在以下链接中find:

http://www.ssec.wisc.edu/~tomw/java/unicode.html

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(); 

以下正则expression式匹配字母数字字符和下划线:

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

在计算机科学中,字母数字值通常意味着第一个字符不是数字,而是字母或下划线。 此后,字符可以是0-9AZaz或下划线( _ )。

以下是你将如何做到这一点:

在php下testing:

 $regex = '/^[A-Za-z_][A-Za-z\d_]*$/' 

或拿这个

 ^[A-Za-z_][A-Za-z\d_]*$ 

并把它放在你的开发语言中。

对我来说,有一个问题,我想区分字母,数字和字母数字,所以为了确保字母数字string包含至less一个字母和至less一个数字,我用:

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

对于那些寻找unicode字母数字匹配的用户,您可能需要执行如下操作:

 ^[\p{L} \p{Nd}_]+$ 

进一步阅读http://unicode.org/reports/tr18/和http://www.regular-expressions.info/unicode.html

这是正则expression式,你需要一个量词来指定至less1个字符和不超过255个字符

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

在正则expression式中匹配变音符打开了一整jar蠕虫,特别是在考虑到Unicode时。 您可能要特别阅读有关Posix语言环境的信息。

要检查整个string,不允许空string,请尝试

 ^[A-Za-z0-9_]+$ 

这对我来说可以尝试[\ p {Alnum} _]