仅字符 a-z、A-Z 的正则表达式
Posted
技术标签:
【中文标题】仅字符 a-z、A-Z 的正则表达式【英文标题】:Regular expression for only characters a-z, A-Z 【发布时间】:2011-04-01 17:11:18 【问题描述】:我不知道如何在 javascript 或 jQuery 中创建正则表达式。
我想创建一个正则表达式来检查字符串是否仅包含 a-z 和 A-Z 之间的任意排列的字符。
编辑
当我尝试制作正则表达式时
/^[a-zA-Z\s]+$/
也接受空格。它不工作。可能是什么错误?
我正在 JavaScript RegExp Example: Online Regular Expression Tester 测试我的正则表达式。
【问题讨论】:
在您的新正则表达式上,它应该可以工作。至少它在这里工作。 参见:rubular.com/r/kl8wklKBxy(我知道它是 ruby,但我也在 JS 上测试过) 如果您包含/
s,您的新正则表达式将无法在该站点上运行,因为它们分隔了表达式的开始和结束。
【参考方案1】:
这个/[^a-z]/g
解决了问题。
function pangram(str)
let regExp = /[^a-z]/g;
let letters = str.toLowerCase().replace(regExp, '');
document.getElementById('letters').innerhtml = letters;
pangram('GHV 2@# %hfr efg uor7 489(*&^% knt lhtkjj ngnm!@#$%^&*()_');
<h4 id="letters"></h4>
【讨论】:
【参考方案2】:使用 POSIX 括号表达式(Javascript 不支持)可以这样做:
/[:alpha:]+/
任何字母字符 A 到 Z 或 a 到 z。
或
/^[[:alpha:]]+$/s
严格匹配空格。
【讨论】:
但是……这不应该是 /[[:alpha:]]+/ 吗?对于某些字符编码,正则表达式 [a-zA-Z] 将返回不正确的值(例如 EBCDIC,i 和 j 之间有一个间隙,r 和 s 之间有另一个间隙(包括 ~ 字符),以及 I 和J 和 R 和 S 之间。这个适用于任何地方。[[:alpha:]]
是正确的,但许多语言只会删除警告和 DWYM。或者它可能只是未经测试。
@James,可以说,如果从字面上理解这个问题,[a-zA-Z]
即使对于 EBCDIC 也会给出正确的结果,而[[:alpha:]]
会为 EBCDIC 返回不正确的结果。因为这个问题不仅仅要求字母。它要求 a-z,A-Z。 :-/
@LarsH - 这是一个非常(实际上令人讨厌)的好点,但我想我会坚持我的解释。谁真的想在 a-zA-Z 中包含 ~、 和一堆不可打印的东西?【参考方案3】:
捎带其他答案的内容,因为你根本不知道如何去做,这里有一个例子说明你可以如何在 JavaScript 中做到这一点:
var charactersOnly = "This contains only characters";
var nonCharacters = "This has _@#*($()*@#$(*@%^_(#@!$ non-characters";
if (charactersOnly.search(/[^a-zA-Z]+/) === -1)
alert("Only characters");
if (nonCharacters.search(/[^a-zA-Z]+/))
alert("There are non characters.");
正则表达式的开头和结尾/
表示它是一个正则表达式。 search
函数接受字符串和正则表达式,因此/
是指定正则表达式所必需的。
从the MDN Docs,如果没有匹配,函数返回-1
。
另请注意:这仅适用于 a-z、A-Z。如果有空格,就会失败。
【讨论】:
【参考方案4】:/^[a-zA-Z]+$/
在我的头顶。
编辑:
或者如果你不喜欢看起来很奇怪的文字语法,你可以这样做
new RegExp("^[a-zA-Z]+$");
【讨论】:
我错过了 ^ 和 $,我将编辑我的答案以使其正确,但支持 @NullUserException 以获得第一个【参考方案5】:/^[a-zA-Z]*$/
如果您不想允许空匹配,请将 *
更改为 +
。
参考资料:
Character classes ([...]
)、Anchors (^
and $
)、Repetition (+
, *
)
/
只是分隔符,它表示正则表达式的开始和结束。一个用途是现在你可以在上面使用modifiers。
【讨论】:
为什么使用 ^ 和 $。它的目的是什么 @Shantanu:这些用于匹配字符串的开头和结尾。没有它们,任何包含字母的字符串都会被匹配。现在只匹配包含 ONLY 字母的字符串。 @Shantanu: ^ 是字符串的开头,$ 是字符串的结尾。它在这里用于确保完整的字符串确实包含字符。如果你会做/[a-zA-Z]*/
if 也会匹配字符串“1234 fo!” (在“fo”)。以上是关于仅字符 a-z、A-Z 的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章