我真的很想使用 w,但它也与下划线相匹配,所以我与[A-ZA-Z]一起去,这感觉不必要地冗长,以美国为中心。有一个更好的方法吗?类似[ w^_]的东西(我怀疑我的语法正确)吗?

有帮助吗?

解决方案

您可以使用 /[a-z]/i 或者 /[[:alpha:]]/ 也是。实际上, \w 包括数字,甚至不起作用。

其他提示

也许你的意思是 /[[:alpha:]]/?看 Perlre 为了讨论POSIX字符类。

只是使用 \p{L} 这意味着“任何Unicode字母”并在Perl中起作用(/\p{L}/)。您可能需要 use utf8;.

匹配国际(即非ASCII)角色有点艰难,可能取决于很多事情。查看此示例:

#!perl -w

use strict;
use utf8;

my $string = "ä";

print "matched :alpha:\n"  if $string =~ /[[:alpha:]]/;
print "matched ^\\W0-9_\n" if $string =~ /[^\W0-9_]/;
print "matched [a-zA-Z]\n" if $string =~ /[a-zA-Z]/;
print "matched [a-z]i\n"   if $string =~ /[a-z]/i;
print "matched [A-z]\n"    if $string =~ /[A-z]/;

对我来说,这导致了

matched :alpha:

如果您删除 use utf8 然后,没有任何正则表达式匹配。

看着 这个非常相关的问题, ,看来您可能想 use utf8 并结帐 Unicode ::语义.

当然,如果您使用的是直接的ASCII字符,那么上述任何一个正则表达式将起作用。

[^\W0-9_]

# or

[[:alpha:]]

请参阅Perldoc Perlre

一些选项:

1. /[a-z]/i               # case insensitive
2. /[A-Z]/i               # case insensitive
3. /[A-z]/                # explicit range listing (capital 'A' to lowercase 'z')
4. /[[:alpha:]]/          # POSIX alpha character class

我建议使用不敏感的情况或真实的方式 /[a-zA-z]/, ,除非您有一定的语言偏好。

笔记:

  • 数字3要求首先“ a”,然后是小写“ z”,因为ASCII值的顺序;如果您进行相反的情况,它不起作用: a-Z. 。还: 此方法将使无通用标准失败,因为它包括 [ \ ] ^ _ ` .
  • 数字4将与这些其他语言字符匹配,但也可以匹配:
    ʹʺʻˍˎˏːˑˬˮ̀́ (加上许多其他)

您正在寻找以下方面的国际化吗?然后,您需要像这个家伙那样做: 国际角色的JavaScript验证问题

明确匹配所有月亮语言字母:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top