是否有正则表达式检查字符串是否只包含大写字母、小写字母、数字和下划线?


当前回答

这对我很有用。我在O'Reilly的“精通正则表达式”中发现了这个:

/^\w+$/

解释:

^声明字符串开始的位置 \w+匹配任何单词字符(等于[a-zA-Z0-9_]) “+”量词-在一次和无限次之间进行匹配,尽可能多地进行匹配,根据需要进行回馈(贪婪) $在字符串的末尾断言位置

验证自己:

Const regex = /^\w+$/ Const STR = ' nut_cracker_12 '; 让米; If ((m = regex.exec(str)) !== null) { //结果可以通过' m '变量访问。 m.forEach((match, groupIndex) => { console.log('找到匹配,组${groupIndex}: ${match} '); }); }

其他回答

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

"^[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{Alnum}_]

这里有很多冗长的内容,我非常反对,所以,我的结论是:

/^\w+$/

\w等价于[A-Za-z0-9_],这就是你想要的(除非我们在混合中引入Unicode)。

使用+量词可以匹配一个或多个字符。如果你也想接受一个空字符串,使用*代替。

下面是一个正则表达式,用于使用量词指定至少1个字符且不超过255个字符

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

试试我为字符串做的这些多语言扩展。

isalphannumeric—字符串必须包含至少一个alpha(在Unicode范围内的字母,在charSet中指定)和至少一个数字(在numSet中指定)。同样,字符串应该只包含alpha和数字。

IsAlpha -字符串应该包含至少一个alpha(在指定的语言字符集中),并且只由alpha组成。

IsNumeric -字符串应该至少包含一个数字(使用指定的语言numSet),并且仅由数字组成。

可以指定所需语言的charSet/numSet范围。Unicode范围可在Unicode图表。

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