【问题标题】:Regular expression for only characters a-z, A-Z仅字符 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,您的新正则表达式将无法在该站点上运行,因为它们分隔了表达式的开始和结束。

标签: javascript jquery regex


【解决方案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”)。
      猜你喜欢
      • 1970-01-01
      • 2011-08-26
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多