正则表达式用于匹配字母数字和下划线

803

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


19
不同的正则表达式引擎对于匹配字母数字字符的方法不一样,这真是令人遗憾。像这样的问题(相当模糊,没有指定任何语言/正则表达式风格)需要一个非常长的,或者至少是一个很有组织的答案来详细讲解每种风格的匹配方法。 - Wiktor Stribiżew
21个回答

9
以下正则表达式匹配字母数字和下划线:
^[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";
}

那是有意为之的,代码示例旨在澄清实际检查字符串的用法。这也是为什么代码开头和结尾都有行标记,而正则表达式示例中没有的原因。 - Jay
@Jay:如果正则表达式在源代码片段上面是正确的正则表达式而不是部分正则表达式,那么你的答案会更清晰。不懂Perl的人会看你的正则表达式,但不会看Perl片段。 - Jan Goyvaerts
1
@Windows程序员 - http://en.wikipedia.org/wiki/Alphanumeric - 拉丁字母表,不是“拉丁字符集”,后者包括变音符等。纯粹是语义问题,但我个人认为字母数字应按照常用法指A-Z和0-9。 - Jay
2
ñ是西班牙语字母表中的一个字母,包括在拉丁美洲地区。 - Windows programmer
2
我想要一个正则表达式,用于检查字符串是否仅包含大写字母、小写字母、数字和下划线,不限于拉丁字母。以下正则表达式匹配字母数字字符和下划线,但不限于拉丁字母:"^[a-zA-Z0-9_]+$" 失败了。 - Windows programmer
显示剩余3条评论

6

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

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

而且我是指,

abcd       True
abcd12     True
ab12cd     True
12abcd     True

1234       False

解释

  1. ^ ... $ - 匹配以...开头和结尾的模式
  2. [\d]* - 匹配零个或多个数字
  3. [a-z_] - 匹配字母或下划线
  4. [a-z\d_]* - 匹配字母、数字或下划线
  5. /gi - 全局匹配字符串,不区分大小写

3
原问题并没有要求信件必须出现。 - Dmitry Kuzminov
你在说哪个字母?我的正则表达式包含问题中提到的字母,即字母、数字、下划线。 - Chinmaya Pati
1
"1234" 是作者要求的语言中的单词。你的语言更加严格。 - Dmitry Kuzminov

5

如果您正在寻找Unicode字母数字匹配,您可能需要执行以下操作:

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

进一步阅读请参考Unicode正则表达式(Unicode联盟)和Unicode正则表达式(Regular-Expressions.info)。

如果您只需要拉丁字符,请使用p{Latin}而不是p{L}。 - Agustin

4
这是你需要的正则表达式,使用量词指定至少1个字符且不超过255个字符。
[^a-zA-Z0-9 _]{1,255}

4

对于我而言,有一个问题是我想区分字母、数字和字母数字混合的字符串。为了确保一个字母数字混合的字符串至少包含一个字母和一个数字,我使用了以下代码:

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

正是我想要的...谢谢 - Aniket kale

3

我相信您的匹配中没有考虑到拉丁文和Unicode字符。

例如,如果您需要使用“ã”或“ü”字符,则使用“\w”将无法起作用。

您可以选择使用以下方法:

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

2

^\w*$ 可以用于以下组合:

1
123
1av
pRo
av1

空行呢?它也算作字母数字字符串吗? - v010dya

2

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

  • ^ Matches the string starting with any characters

  • [a-zA-Z0-9_]+ Matches alpha-numeric character and underscore.

  • $ Matches the string ending with zero or more characters.

      public class RegExTest {
          public static void main(String[] args) {
              System.out.println("_C#".matches("^[a-zA-Z0-9_]+$"));
          }
      }
    

1
这对我有效。你可以尝试:
[\\p{Alnum}_]

我尝试这个,但是出现了未知属性Alnum,这个是在哪里定义的? - Chuck Savage

1

为了检查整个字符串并且不允许空字符串,请尝试

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接