我想有一个正则表达式,用于检查字符串是否仅包含大小写字母,数字和下划线。
我想有一个正则表达式,用于检查字符串是否仅包含大小写字母,数字和下划线。
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}`);
    });
}