我想要一个正则表达式来检查字符串是否只包含大写和小写字母,数字和下划线。
答案 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-9
,A-Z
,a-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+$/
说明:
验证自己:
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
abcd True
abcd12 True
ab12cd True
12abcd True
1234 False
-匹配以^ ... $
-匹配零个或多个数字[\d]*
-匹配字母或下划线[a-z_]
-匹配字母,数字或下划线[a-z\d_]*
-在整个字符串中全局匹配且不区分大小写答案 20 :(得分:0)
必需格式 允许这些3:
不允许其他格式:
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, 只允许不区分大小写的字母数字和下划线。
public class RegExTest {
public static void main(String[] args) {
System.out.println("_C#".matches("^[a-zA-Z0-9_]+$"));
}
}