我想有一个正则表达式,用于检查字符串是否仅包含大小写字母,数字和下划线。
我想有一个正则表达式,用于检查字符串是否仅包含大小写字母,数字和下划线。
Answers:
要匹配仅包含这些字符的字符串(或空字符串),请尝试
"^[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指出了这一点)。因此,如果您真的只想匹配那些字符,则最好使用显式(较长)形式。
[\p{upper}\p{lower}\p{gc=Number}_]
假设没有任何组合字符,这就是您需要做的所有事情。
这里有很多详细信息,我对此表示强烈反对,因此,我的最终答案将是:
/^\w+$/
\w
等价于[A-Za-z0-9_]
,这几乎就是您想要的。(除非我们将unicode引入混合)
使用+
量词,您将匹配一个或多个字符。如果您也想接受一个空字符串,请*
改用。
\w
通常不仅仅限于ASCII。
[a-z]
及其变体。\w
也将捕获非拉丁字符。喜欢šēēā
还是кукареку
您要检查每个字符是否符合您的要求,这就是我们使用以下原因的原因:
[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字符(如–字母)。
尝试这些我为字符串制作的多语言扩展。
IsAlphaNumeric-字符串必须包含至少1个alpha(在Unicode范围内的字母,在charSet中指定)和至少1个数字(在numSet中指定)。此外,字符串应仅包含字母和数字。
IsAlpha-字符串应至少包含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";
}
在大多数情况下,这应该可行。
/^[\d]*[a-z_][a-z\d_]*$/gi
我的意思是
abcd True
abcd12 True
ab12cd True
12abcd True
1234 False
^ ... $
-匹配以和开头的模式[\d]*
-匹配零个或多个数字[a-z_]
-匹配字母或下划线[a-z\d_]*
-匹配字母,数字或下划线/gi
-在整个字符串中全局匹配且不区分大小写1234
是作者要求的语言中的单词。您的语言更具限制性。
对我来说,存在一个问题,我想区分字母,数字和字母数字,因此为了确保字母数字字符串包含至少一个字母和至少一个数字,我使用了:
^([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
我相信您在比赛中不会使用拉丁和Unicode字符。例如,如果您需要使用“ã”或“ü”字符,则无法使用“ \ w”。
您也可以使用以下方法:
^[A-ZÀ-Ýa-zà-ý0-9_]+$
希望能帮助到你!
这对我有用,可以在O'Reilly的“掌握正则表达式”中找到:
/^\w+$/
说明:
验证自己:
const regex = /^\w+$/;
const str = `nut_cracker_12`;
let m;
if ((m = regex.exec(str)) !== null) {
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}