我想要一个正则表达式来检查字符串是否只包含大小写字母、数字和下划线。
要匹配仅包含这些字符(或空字符串)的字符串,请尝试
"^[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+$/
\w
相当于 [A-Za-z0-9_]
,这几乎是您想要的。 (除非我们在混合中引入 unicode)
使用 +
量词,您将匹配一个或多个字符。如果您也想接受空字符串,请改用 *
。
\w
通常不仅限于 ASCII。
[a-z]
及其变体。 \w
也会捕获非拉丁字符。喜欢 šēēā
或 кукареку
\w
等同于 ECMAScript 中的 [a-zA-Z0-9_]
(即在现代 Web 浏览器中运行的内容),这意味着两者都被限制为 ASCII。
您想检查每个字符是否符合您的要求,这就是我们使用的原因:
[A-Za-z0-9_]
你甚至可以使用速记版本:
\w
这是等效的(在某些正则表达式中,因此请确保在使用之前进行检查)。然后要指示整个字符串必须匹配,请使用:
^
要指示字符串必须以该字符开头,然后使用
$
指示字符串必须以该字符结尾。然后使用
\w+ or \w*
表示“1 或更多”,或“0 或更多”。综上所述,我们有:
^\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 字符(如 – 之类的字母)。
嗯...问题:它是否需要至少有一个字符?可以是空字符串吗?
^[A-Za-z0-9_]+$
将至少使用一个大写或小写字母数字或下划线。如果它可以是零长度,那么只需将 + 替换为 *
^[A-Za-z0-9_]*$
编辑:
如果需要包含变音符号(例如 cedilla - ç),那么您需要使用与上述相同的单词 character,但包含变音符号:
^\w+$
或者
^\w*$
在计算机科学中,字母数字值通常意味着第一个字符不是数字,而是字母或下划线。此后,字符可以是 0-9
、A-Z
、a-z
或下划线 (_
)。
以下是您将如何执行此操作:
在php下测试:
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
或者拿这个
^[A-Za-z_][A-Za-z\d_]*$
并将其放在您的开发语言中。
怎么样:
^([A-Za-z]|[0-9]|_)+$
...如果你想明确,或者:
^\w+$
...如果您喜欢简洁(Perl 语法)。
使用前瞻来做“至少一个”的事情。相信我,这要容易得多。
这是一个需要 1-10 个字符的示例,其中至少包含一个数字和一个字母:
^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$
注意:本可以使用 \w 但随后 ECMA/Unicode 考虑开始发挥作用,增加了 \w “单词字符”的字符覆盖率。
这对我有用,在 O'Reilly 的“掌握正则表达式”中找到了这个:
/^\w+$/
解释:
^ 断言字符串开头的位置 \w+ 匹配任何单词字符(等于 [a-zA-Z0-9_]) “+” 量词 - 匹配一次到无限次,尽可能多次,根据需要返回 (贪婪的)
\w+ 匹配任何单词字符(等于 [a-zA-Z0-9_])
“+”量词——匹配一次到无限次,尽可能多次,根据需要回馈(贪婪)
$ 断言字符串末尾的位置
验证自己:
常量正则表达式 = /^\w+$/;常量 str = `nut_cracker_12`;让 m; if ((m = regex.exec(str)) !== null) { // 可以通过 `m` 变量访问结果。 m.forEach((match, groupIndex) => { console.log(`找到匹配,组 ${groupIndex}: ${match}`); }); }
试试我为字符串制作的这些多语言扩展。
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
接口:
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_] - 匹配字母或下划线 [az\d_]* - 匹配字母或数字或下划线 / gi - 跨字符串全局匹配且不区分大小写
1234
是作者要求的语言中的单词。你的语言更严格。
对于那些寻找 unicode 字母数字匹配的人,您可能想要执行以下操作:
^[\p{L} \p{Nd}_]+$
在 http://unicode.org/reports/tr18/ 和 http://www.regular-expressions.info/unicode.html 进一步阅读
对我来说,有一个问题是我想区分字母、数字和字母数字,因此为了确保字母数字字符串包含至少一个字母和至少一个数字,我使用了:
^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$
这是您希望使用量词指定至少 1 个字符且不超过 255 个字符的正则表达式
[^a-zA-Z0-9 _]{1,255}
我相信您在比赛中没有使用拉丁字符和 Unicode 字符。例如,如果您需要使用 "ã" 或 "ü" 字符,则使用 "\w" 将不起作用。
或者,您可以使用这种方法:
^[A-ZÀ-Ýa-zà-ý0-9_]+$
希望能帮助到你!
^\w*$
适用于以下组合
1
123
1av
pRo
av1
对于 Java,只允许不区分大小写的字母数字和下划线。
^ 匹配以任意字符开头的字符串
[a-zA-Z0-9_]+ 匹配字母数字字符和下划线。
$ 匹配以零个或多个字符结尾的字符串。
公共类 RegExTest { public static void main(String[] args) { System.out.println("_C#".matches("^[a-zA-Z0-9_]+$")); } }
要检查整个字符串并且不允许空字符串,请尝试
^[A-Za-z0-9_]+$
这对我有用,你可以试试
[\\p{Alnum}_]
所需格式 允许以下 3 个:
0142171547295 014-2171547295 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()"/>
不定期副业成功案例分享
[\p{upper}\p{lower}\p{gc=Number}_]
是您正确执行此操作所需的全部内容,假设没有组合字符。