正则表达式仅匹配字母字符


157

我想知道是否可以得到一个仅包含字母字符的字符串匹配的正则表达式。


2
/ ^ [a-zA-Z] + $ /之类的东西应该可以工作。
朱利安·高(Julian Go),

10
是否à根据您的定义字母字符?您使用什么语言?
蒂姆·皮茨克

2
空字符串应该匹配吗?
2011年

不,一个空字符串不应该匹配
Steffan Harris'May

一个重要的注意事项:您没有在想要使用正则表达式的地方提到过一种语言或工具。尽管正则表达式的原理在总体上是相同的,但语法并不是到处都一样。您应该在想要使用它的地方进行参考。
sergiol 2011年

Answers:


186

您可以使用以下两个变体中的任何一个:

/^[A-Z]+$/i
/^[A-Za-z]+$/

匹配ASCII字母的输入字符串。

  • [A-Za-z] 将匹配所有字母(小写和大写)。
  • ^$确保除了这些字母外,什么都不会匹​​配。

码:

preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m);
var_dump($m);

输出:

array(0) {
}

测试用例用于OP的评论,即他在输入中存在1个或多个字母时才希望匹配。如您所见,在测试用例中,匹配失败,因为^输入字符串中存在abcAbc^Xyz

注意:请注意,以上答案仅与ASCII字母匹配,与Unicode字符不匹配。如果要匹配Unicode字母,请使用:

/^\p{L}+$/u

在这里,可以\p{L}匹配任何语言的任何字母


22
在某些方言中,[Az]将匹配出现在'Z'和'a'之间的ASCII标点值,特别是'[','\',']','^','-'和'`'以及从“ A”到“ Z”以及从“ a”到“ z”。
李,

我真正想要的是仅当它具有字母字符时才匹配我的字符串的方法,如果它具有非字母字符,则不应该匹配。
斯特凡·哈里斯

7
@李:没有。他们全部。此正则表达式在当前状态下是错误的。
蒂姆·皮茨克

7
\w is shorthand for A-Za-z-不是真的,\w是速记[a-zA-Z0-9_]
anubhava '16

1
好点@ jpmc26。我已经编辑了答案,以消除最初的错误。
anubhava '18

55

如果您需要包括非ASCII字母字符,并且您的正则表达式支持Unicode,则

\A\pL+\z

将是正确的正则表达式。

一些正则表达式引擎不支持此Unicode语法,但允许\w字母数字速记也可以匹配非ASCII字符。在这种情况下,可以通过减去以下数字和下划线来获得所有字母\w

\A[^\W\d_]+\z

\A在字符串的开头,字符串\z的末尾匹配(^并且$在某些语言(例如Ruby)中,或者在设置了某些正则表达式选项的情况下,也匹配在行的开头/结尾)。


38
+1不考虑英语字母为唯一字母
srcspider 2012年

7
+1,与上述相同。英语不是唯一的字母,许多人使用非ASCII字符写出他们的名字以正确表达它。
Ben Barkay 2013年

22

这将匹配一个或多个字母字符:

/^[a-z]+$/

您可以使用以下命令使其不区分大小写:

/^[a-z]+$/i

要么:

/^[a-zA-Z]+$/

这将仅匹配拉丁字符。
quotesBro


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.