字母数字和下划线的正则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-9
, AZ
, az
或下划线( _
)。
以下是你将如何做到这一点:
在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} _]