当前位置:  开发笔记 > 编程语言 > 正文

字母数字和下划线的正则表达式

如何解决《字母数字和下划线的正则表达式》经验,为你挑选了10个好方法。

我想有一个正则表达式,检查字符串是否只包含大写和小写字母,数字和下划线.



1> Charlie..:

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

"^[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和[A-Za-z0-9_]在大多数正则表达式中都不相同.\ w包括带有变音符号的字母,来自其他脚本的字母等.
如果你去过德国,或者你曾经看过任何德语文本,你会看到我在说什么.
最初的问题确实说"大写和小写字母",所以看起来非拉丁文字的"字母"应该匹配.
`[\ p {upper}\p {lower}\p {gc = Number} _]`你需要这么做,假设没有组合字符.

2> kch..:

这里有很多冗长,我深深反对,所以,我的结论是:

/^\w+$/

\w相当于[A-Za-z0-9_],这几乎是你想要的.(除非我们将unicode引入混音)

使用+量词,您将匹配一个或多个字符.如果您也想接受空字符串,请*改用.


`\ w`通常不仅限于ASCII.
英语不是世界上唯一的语言,所以这应该是公认的答案,而不是"[az]"及其变体.`\ w`也会捕获非拉丁字符.喜欢`šēēā`或`кукареку`

3> Anton..:

您想检查每个字符是否符合您的要求,这就是我们使用的原因:

[A-Za-z0-9_]

你甚至可以使用速记版本:

\w

这是等效的(在某些正则表达式中,所以请确保在使用之前进行检查).然后,为了表明整个字符串必须匹配,您使用:

^

要指示字符串必须以该字符开头,请使用

$

指示字符串必须以该字符结尾.然后用

\w+ or \w*

表示"1或更多",或"0或更多".总而言之,我们有:

^\w*$


\ w和[A-Za-z0-9_]在大多数正则表达式中都不相同.\ w包括带有变音符号的字母,来自其他脚本的字母等.

4> BenAlabaster..:

嗯......问题:是否需要至少有一个角色?它可以是一个空字符串吗?

^[A-Za-z0-9_]+$

将做至少一个大写或小写字母数字或下划线.如果它可以是零长度,那么只需用+代替*

^[A-Za-z0-9_]*$

编辑:

如果需要包含变音符号(例如cedilla - ç),那么你需要使用与上面相同的单词character,但包括变音字符:

^\w+$

要么

^\w*$



5> Day Davis Wa..:

虽然它比起来更冗长\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字符(字母,如œ).



6> 小智..:

在计算机科学中,字母数字值通常表示第一个字符不是数字,而是字母或下划线.此后,字符可以是0-9,A-Z,a-z,或下划线(_).

以下是您将如何做到这一点:

在php下测试:

$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'

或者拿这个

^[A-Za-z_][A-Za-z\d_]*$

并将其放在您的开发语言中.



7> Drew Hall..:

怎么样:

^([A-Za-z]|[0-9]|_)+$

...如果你想要明确,或者:

^\w+$

...如果您更喜欢简洁(Perl语法).



8> 小智..:

使用前瞻来做"至少一个"的东西.相信我,这更容易.

这是一个需要1-10个字符的示例,包含至少一个数字和一个字母:

^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$

注意:本来可以使用\ w但是ECMA/Unicode考虑因素会起作用,增加\ w"单词字符"的字符覆盖率.



9> Shantanu..:

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

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



10> Jay..:

以下正则表达式匹配字母数字字符和下划线:

^[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";
}


什么时候 - 不再是拉丁语?
ñ是西班牙语字母表,包括拉丁美洲.
"我希望有一个正则表达式来检查字符串是否只包含大写和小写字母,数字和下划线"并不限制它为拉丁字母."以下正则表达式匹配字母数字字符和下划线"并不限制它为拉丁字母."^ [a-zA-Z0-9 _] + $"失败.
推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有