正则表达式只匹配字母

时间:2010-09-01 12:07:56

标签: regex language-agnostic letter

如何编写仅与字母匹配的正则表达式?

20 个答案:

答案 0 :(得分:337)

使用字符集:[a-zA-Z]以小写和大写形式匹配来自A-Z的一个字母。 [a-zA-Z]+匹配一个或多个字母,^[a-zA-Z]+$仅匹配仅包含一个或多个字母的字符串(^$分别标记字符串的开头和结尾)。

如果您想匹配除A-Z之外的其他字母,您可以将它们添加到字符集:[a-zA-ZäöüßÄÖÜ]。或者您使用预定义的字符类,如Unicode character property\p{L},它描述了字母的Unicode字符。

答案 1 :(得分:163)

如果您对拉丁语以外的字母表感兴趣,

\p{L}会匹配任何Unicode字母

答案 2 :(得分:41)

取决于您“字符”的含义:

  

[A-Za-z] - 所有字母(大写和小写)

  

[^0-9] - 所有非数字字符

答案 3 :(得分:28)

最接近的选项是

[\u\l]+

匹配大写和小写字母的序列。但是,并非所有编辑器/语言都支持它,因此使用

可能更安全
[a-zA-Z]+

正如其他用户所建议的那样

答案 4 :(得分:13)

你会用

DATE

[] - 检查给定输入之间的任何字符

a-z ---涵盖整个字母

g -----遍及整个字符串的全局

我-----获得大写和小写

答案 5 :(得分:12)

很少有人写成“/ ^ [a-zA-Z] $ / i”的正则表达式是不正确的,因为最后他们提到了 / i 这是不区分大小写的在第一次匹配后它将返回。而不是 / i 只使用 / g 这是全局的,你也没有必要把 ^ $ 用于开始和结束。

/[a-zA-Z]+/g
  1. [a-z _] + 匹配下面列表中的单个字符
  2. 量词: + 在一次和无限次之间,尽可能多次,根据需要回馈
  3. a-z a和z之间范围内的单个字符(区分大小写)
  4. A-Z A和Z之间范围内的单个字符(区分大小写)
  5. g 修饰符:全局。所有比赛(首场比赛时不返回)

答案 6 :(得分:11)

对于PHP,以下将正常工作

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

答案 7 :(得分:10)

/[a-zA-Z]+/

超级简单的例子。正则表达式非常容易在线查​​找。

http://www.regular-expressions.info/reference.html

答案 8 :(得分:8)

爪哇:

String s= "abcdef";

if(s.matches("[a-zA-Z]+")){
     System.out.println("string only contains letters");
}

答案 9 :(得分:6)

只需使用\w[:alpha:]即可。它是一个转义序列,只匹配可能出现在单词中的符号。

答案 10 :(得分:5)

使用字符组

if (scope.sampleForm.$valid) {
 // success code
} else {
    angular.forEach(scope.sampleForm.$error, function (field) {
           angular.forEach(field, function (errorField) {
                  errorField.$setTouched();
           })
    });                   
}

匹配除数字0-9

以外的任何字符
\D

参见示例here

答案 11 :(得分:3)

如果您指的是任何字符编码中的任何字母,那么一个好的方法可能是删除非字母,如空格\s,数字\d和其他特殊字符,如:

[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]

或者使用否定上述否定来直接描述任何字母:

\S \D and [^  ..special chars..]

优点:

  • 适用于所有正则表达式。
  • 易于书写,有时可节省大量时间。

缺点:

  • 很长,有时不完美,但字符编码也可以打破。

答案 12 :(得分:3)

您可以尝试使用此正则表达式:[^\W\d_][a-zA-Z]

答案 13 :(得分:2)

在python中,我发现以下内容可以工作:

[^\W\d_]

之所以行之有效,是因为我们正在创建一个新的字符类([]),该类将(^类中的任何字符排除在外(\W中([a-zA-Z0-9_]中不存在的所有字符) ,还排除任何数字(\d),也排除下划线(_)。

也就是说,我们采用了字符类[a-zA-Z0-9_],并删除了0-9_位。您可能会问,写[a-zA-Z]而不是[^\W\d_]会更容易吗?如果仅处理ASCII文本,而处理Unicode文本,则将是正确的:

\ W

匹配不是单词字符的任何字符。这与\ w相反。 >如果使用ASCII标志,则等同于[^ a-zA-Z0-9 _]。

来自the python re module documentation

^

也就是说,我们将所有被认为是unicode中的单词字符的内容,删除所有被认为是unicode中的数字字符的内容,并删除下划线。

例如,以下代码段

import re
regex = "[^\W\d_]"
test_string = "A;,./>>?()*)&^*&^%&^#Bsfa1 203974"
re.findall(regex, test_string)

返回

['A', 'B', 's', 'f', 'a']

答案 14 :(得分:1)

pattern = / [a-zA-Z] /

put" [a-zA-Z]:#{pattern.match(" mine blossom")}"行

put" [a-zA-Z]:#{pattern.match(" 456")}"

put" [a-zA-Z]:#{pattern.match("")}"

put" [a-zA-Z]:#{pattern.match("#$%^& *")}"

put" [a-zA-Z]:#{pattern.match("#$%^& * A")}"行

答案 15 :(得分:1)

最近我在表单中使用了这种模式来检查人的名字,其中包含字母,空格和带重音符号的特殊字符。

pattern="[A-zÀ-ú\s]+"

答案 16 :(得分:1)

/^[A-z]+$/.test('asd')
// true

/^[A-z]+$/.test('asd0')
// false

/^[A-z]+$/.test('0asd')
// false

答案 17 :(得分:0)

JavaScript

如果您想返回匹配的字母:

('Example 123').match(/[A-Z]/gi) // 结果:[“ E”,“ x”,“ a”,“ m”,“ p”,“ l”,“ e”]

例如,如果要用星号('*')替换匹配的字母,

('Example 123').replace(/[A-Z]/gi, '*') //结果: ****** 123” *

答案 18 :(得分:0)

因此,我一直在阅读很多答案,而且大多数答案都没有考虑到例外情况,例如带有重音或变音符号(á,à,ä等)的字母。

我用打字稿制作了一个函数,该函数应该可以推断出可以使用RegExp的任何语言。这是我在打字稿中针对我的用例的个人实现。我基本上要做的是用我想添加的每种符号添加字母范围。在应用RegExp之前,我还将char转换为大写,这为我节省了一些工作。

function isLetter(char: string): boolean {
  return char.toUpperCase().match('[A-ZÀ-ÚÄ-Ü\s]+') !== null;
}

如果要添加另一种字母范围的字母,只需将其添加到正则表达式中即可。特殊符号也是如此。

我用TDD实现了此功能,并且至少在以下情况下,我可以确认该功能是否有效:

    character | isLetter
    ${'A'}    | ${true}
    ${'e'}    | ${true}
    ${'Á'}    | ${true}
    ${'ü'}    | ${true}
    ${'ù'}    | ${true}
    ${'û'}    | ${true}
    ${'('}    | ${false}
    ${'^'}    | ${false}
    ${"'"}    | ${false}
    ${'`'}    | ${false}

答案 19 :(得分:-2)

Pattern pattern = Pattern.compile("^[a-zA-Z]+$");

if (pattern.matcher("a").find()) {

   ...do something ......
}