我想有一个正则表达式,检查字符串是否只包含大写和小写字母,数字和下划线.
要匹配仅包含这些字符(或空字符串)的字符串,请尝试
"^[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指出这一点).因此,如果您真的打算只匹配这些字符,那么使用显式(更长)形式可能是最好的.
这里有很多冗长,我深深反对,所以,我的结论是:
/^\w+$/
\w
相当于[A-Za-z0-9_]
,这几乎是你想要的.(除非我们将unicode引入混音)
使用+
量词,您将匹配一个或多个字符.如果您也想接受空字符串,请*
改用.
您想检查每个字符是否符合您的要求,这就是我们使用的原因:
[A-Za-z0-9_]
你甚至可以使用速记版本:
\w
这是等效的(在某些正则表达式中,所以请确保在使用之前进行检查).然后,为了表明整个字符串必须匹配,您使用:
^
要指示字符串必须以该字符开头,请使用
$
指示字符串必须以该字符结尾.然后用
\w+ or \w*
表示"1或更多",或"0或更多".总而言之,我们有:
^\w*$
嗯......问题:是否需要至少有一个角色?它可以是一个空字符串吗?
^[A-Za-z0-9_]+$
将做至少一个大写或小写字母数字或下划线.如果它可以是零长度,那么只需用+代替*
^[A-Za-z0-9_]*$
编辑:
如果需要包含变音符号(例如cedilla - ç),那么你需要使用与上面相同的单词character,但包括变音字符:
^\w+$
要么
^\w*$
虽然它比起来更冗长\w
,但我个人非常欣赏完整POSIX字符类名称的可读性(http://www.zytrax.com/tech/web/regex.htm#special),所以我会说:
^[[:alnum:]_]+$
但是,虽然上述链接的文档说" \w
将匹配范围0 - 9,A - Z和a - z(相当于POSIX [:alnum:])"中的任何字符,但我没有发现这是真的.grep -P
反正不是.如果使用[:alnum:]
,则需要明确包含下划线,但如果使用则不需要\w
.简短而甜蜜的你无法击败以下内容:
^\w+$
除了可读性之外,使用POSIX字符类(http://www.regular-expressions.info/posixbrackets.html)意味着你的正则表达式可以处理非ASCII字符串,基于范围的正则表达式不会因为它们依赖ASCII字符的基础排序可能与其他字符集不同,因此会排除您可能想要捕获的一些非ASCII字符(字母,如œ).
在计算机科学中,字母数字值通常表示第一个字符不是数字,而是字母或下划线.此后,字符可以是0-9
,A-Z
,a-z
,或下划线(_
).
以下是您将如何做到这一点:
在php下测试:
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
或者拿这个
^[A-Za-z_][A-Za-z\d_]*$
并将其放在您的开发语言中.
怎么样:
^([A-Za-z]|[0-9]|_)+$
...如果你想要明确,或者:
^\w+$
...如果您更喜欢简洁(Perl语法).
使用前瞻来做"至少一个"的东西.相信我,这更容易.
这是一个需要1-10个字符的示例,包含至少一个数字和一个字母:
^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$
注意:本来可以使用\ w但是ECMA/Unicode考虑因素会起作用,增加\ w"单词字符"的字符覆盖率.
试试我为字符串做的这些多语言扩展.
IsAlphaNumeric - 字符串必须包含至少1个alpha(Unicode范围内的字母,在charSet中指定)和至少1个数字(在numSet中指定).此外,字符串应仅包含字母和数字.
IsAlpha - String应包含至少1个alpha(在指定的语言charSet中)并且仅包含alpha.
IsNumeric - 字符串应包含至少1个数字(使用指定的语言numSet)并且仅包含数字.
可以指定所需语言的charSet/numSet范围.Unicode范围可在以下链接中找到:
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();
以下正则表达式匹配字母数字字符和下划线:
^[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"; }