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

时间:2008-12-03 04:25:27

标签: regex

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

22 个答案:

答案 0 :(得分:827)

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

"^[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指出这一点)。因此,如果您真的打算匹配这些字符,那么使用显式(更长)形式可能是最好的。

答案 1 :(得分:297)

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

/^\w+$/

\w相当于[A-Za-z0-9_],这正是您想要的。 (除非我们引入unicode)

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

答案 2 :(得分:35)

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

[A-Za-z0-9_]

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

\w

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

^

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

$

表示字符串必须以该字符结尾。然后使用

\w+ or \w*

表示“1或更多”,或“0或更多”。总而言之,我们有:

^\w*$

答案 3 :(得分:25)

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

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

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

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

编辑:

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

^\w+$

或者

^\w*$

答案 4 :(得分:25)

虽然它比\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字符(字母,如œ)。

答案 5 :(得分:17)

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

您将如何做到这一点:

在php下测试:

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

或采取此

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

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

答案 6 :(得分:12)

怎么样:

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

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

^\w+$

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

答案 7 :(得分:11)

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

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

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

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

答案 8 :(得分:9)

尝试我为字符串制作的这些多语言扩展。

IsAlphaNumeric - 字符串必须包含至少1个字母(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();

答案 9 :(得分:8)

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

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

答案 10 :(得分:5)

这对我有用,可以在O'Reilly的“掌握正则表达式”中找到:

/^\w+$/

说明:

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

验证自己:

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}`);
    });
}

答案 11 :(得分:4)

对我来说有一个问题,我想区分字母,数字和字母数字,所以为了确保字母数字字符串包含至少一个字母和至少一个数字,我用过:

^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$

答案 12 :(得分:2)

对于那些寻找unicode字母数字匹配的人,您可能希望执行以下操作:

^[\p{L} \p{Nd}_]+$

进一步阅读 http://unicode.org/reports/tr18/ 并在 http://www.regular-expressions.info/unicode.html

答案 13 :(得分:1)

在正则表达式中匹配变音符会打开一大堆蠕虫,特别是考虑到Unicode时。您可能希望特别了解Posix语言环境。

答案 14 :(得分:1)

以下是使用量词指定至少1个字符且不超过255个字符所需的正则表达式

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

答案 15 :(得分:0)

要检查整个字符串而不允许空字符串,请尝试

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

答案 16 :(得分:0)

这对我有用,你可以试试[\ p {Alnum} _]

答案 17 :(得分:0)

^ \ w * $适用于以下组合 1 123 1AV PRO AV1

答案 18 :(得分:0)

我相信您在比赛中不会使用拉丁字符和Unicode字符。 例如,如果您需要使用“ã”或“ü”字符,则不能使用“ \ w”。

您也可以使用这种方法:

^[A-ZÀ-Ýa-zà-ý0-9_]+$

希望有帮助!

答案 19 :(得分:0)

这在大多数情况下应该有效。

"@timestamp" => 2019-12-24T05:58:33.744Z, "message" => "", "command" => "ssh myiphere ls"

最重要的是,

/^[\d]*[a-z_][a-z\d_]*$/gi


说明

  1. abcd True abcd12 True ab12cd True 12abcd True 1234 False -匹配以
  2. 开头和结尾的模式
  3. ^ ... $-匹配零个或多个数字
  4. [\d]*-匹配字母或下划线
  5. [a-z_]-匹配字母,数字或下划线
  6. [a-z\d_]*-在整个字符串中全局匹配且不区分大小写

答案 20 :(得分:0)

必需格式 允许这些3:

  1. 0142171547295
  2. 014-2171547295
  3. 123abc

不允许其他格式:

validatePnrAndTicketNumber(){
    let alphaNumericRegex=/^[a-zA-Z0-9]*$/;
    let numericRegex=/^[0-9]*$/;
    let numericdashRegex=/^(([1-9]{3})\-?([0-9]{10}))$/;
   this.currBookingRefValue = this.requestForm.controls["bookingReference"].value;
   if(this.currBookingRefValue.length == 14 && this.currBookingRefValue.match(numericdashRegex)){
     this.requestForm.controls["bookingReference"].setErrors({'pattern': false});
   }else if(this.currBookingRefValue.length ==6 && this.currBookingRefValue.match(alphaNumericRegex)){
    this.requestForm.controls["bookingReference"].setErrors({'pattern': false});
   }else if(this.currBookingRefValue.length ==13 && this.currBookingRefValue.match(numericRegex) ){
    this.requestForm.controls["bookingReference"].setErrors({'pattern': false});
   }else{
    this.requestForm.controls["bookingReference"].setErrors({'pattern': true});
   }
}
<input name="booking_reference" type="text" [class.input-not-empty]="bookingRef.value"
    class="glyph-input form-control floating-label-input" id="bookings_bookingReference"
    value="" maxlength="14" aria-required="true" role="textbox" #bookingRef
    formControlName="bookingReference" (focus)="resetMessageField()" (blur)="validatePnrAndTicketNumber()"/>

答案 21 :(得分:0)

对于 Java, 只允许不区分大小写的字母数字和下划线。

  • ^ 匹配以任意字符开头的字符串
  • [a-zA-Z0-9]+ 匹配字母数字字符和下划线。
  • $ 匹配以零个或多个字符结尾的字符串。
<块引用>
public class RegExTest {
    public static void main(String[] args) {
        System.out.println("_C#".matches("^[a-zA-Z0-9_]+$"));
    }
}