【问题标题】:Get JavaScript to ignore everything that is not a letter让 JavaScript 忽略所有不是字母的东西
【发布时间】:2013-11-21 16:50:58
【问题描述】:

我如何让 JS 忽略不是字母的所有内容(例如 abc...)不使用正则表达式

Examples
match("abcdef","@C2D!") returns true
match("abcdef","CAfe") returns true
match("abcdef","CG") returns false

这是我到目前为止所做的......

function match(string, pattern) {
    string = string.toLowerCase();
    pattern = pattern.toLowerCase();
    for (var i = 0, l = string.length; i < l; ++i) {
        if(pattern.indexOf(string[i]) === -1) return false;
    }
    return true;
}
alert(match("abcdef", "@C2D!"));

在这里提琴:http://jsfiddle.net/5UCwW/

【问题讨论】:

  • stackoverflow.com/q/3073176/1636522,在你的情况下:!/^[a-zA-Z]+$/.test('@C2D!')
  • 我发现很难理解这个要求。字符串值abcdef 始终只包含字母,并且似乎与您传入的任何模式都不匹配。您能详细说明一下要求吗?
  • 没有正则表达式是否可以做到
  • 如果你不想使用语言的一部分,至少试着解释一下为什么。
  • "没有正则表达式",最好在问题中提及。

标签: javascript


【解决方案1】:

使用如下的正则表达式[^A-Za-z]

var re = /[^A-Za-z]/g;

function match(string, pattern) {
    string = string.toLowerCase();
    pattern = pattern.toLowerCase().replace(re, "");
    for (var i = 0, l = string.length; i < l; ++i) {
        if(pattern.indexOf(string[i]) === -1) return false;
    }
    return true;
}

作为没有 reg ex 的函数

var sanitize = function (str) { 
  var newStr = "", i, charCode;

  for (i = 0; i < str.length; ++i) {
    charCode = str.charCodeAt(i);  
    if (charCode >= 65 && charCode <= 90 ||
        charCode >= 97 && charCode <= 122)  {
      newStr += str[i];
    } 

  return newStr;
}

编辑:A-z 使用从大写 a 到小写 z 的 ascii 值范围。因此这包括]、\、[、^、_ 和`。我不知道这一点,[A-Za-z] 是正确的模式。

【讨论】:

  • 可以放在函数内吗?
  • \w 包括数字和下划线; OP在问题中没有提到这些不应该被忽视。此外,[^\w]\W 相同。
  • 是的,你们是正确的,修正了我的答案以反映它。
  • [A-z][A-Za-z] 不同。
  • @raina77ow 我想通了,谢谢你告诉我。我不知道。我想我是今天的幸运 10000 之一 :)
【解决方案2】:

在字符串上使用 Javascript 的内置匹配方法:

 var mystring = '@C2D!';
 mystring.match(/[^a-zA-Z]/gi).length returns true

 var mystring2 = 'abcdef';
 mystring2.match(/[^a-zA-Z]/gi).length returns false

我假设您正在寻找小写和大写字母。如果只是更低,请使用 [^a-z]。

有关匹配方法的更多信息,请访问此处: http://www.w3schools.com/jsref/jsref_match.asp

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2011-09-13
    • 2017-05-14
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    相关资源
    最近更新 更多