如何编写仅与字母匹配的正则表达式?
答案 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
答案 6 :(得分:11)
对于PHP,以下将正常工作
'/^[a-zA-Z]+$/'
答案 7 :(得分:10)
答案 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文本,则将是正确的:
来自the python re module documentation的\ W
匹配不是单词字符的任何字符。这与\ w相反。 >如果使用ASCII标志,则等同于[^ a-zA-Z0-9 _]。
^
也就是说,我们将所有被认为是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 ......
}