-1

如果模式的所有单个字母都出现在字符串中(无论顺序如何,区分大小写并忽略符号和数字),我如何确保以下代码返回 true。

var s = "abcdef"
var p = "@C2D!"

function match(string, pattern) {

    var count = 0;
    if (pattern) {

        for (i = 0; i < string.length; i++) {
            for (j = 0; j < pattern.length; j++) {
                if ((string.toLowerCase().indexOf(pattern.toLowerCase().charAt([j]))) < 0) {
                    count++;
                }
            }
        }

        if (count == 0) return (true);
        else return (false);
    }
    else {
        return ("");
    }
}

alert(match(s, p));
4

2 回答 2

1

你可以使用

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!"));

或使用正则表达式:

function match(string, pattern) {
    pattern = pattern.replace(/\]/g,'\\]').replace(/\^/g,'\\^').replace(/\-/g,'\\-');
    return RegExp('^['+pattern+']+$','i').test(string);
}
alert(match("abcdef", "@C2D!"));

编辑:哎呀!我没有读到你想忽略符号和数字!

但是你的问题没有明确定义:

  • 你想在字符串、模式或两者中忽略它们吗?
  • 究竟什么是符号?ÄÈéï和是ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚​N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ字母还是符号?
于 2013-11-09T00:25:38.850 回答
0

看来您没有过滤掉符号。可能的解决方案

function match(string, pattern) {
    var i, letter, rex,
        match = false;

    for (i = 0; i < pattern.length; i++) {
        letter = pattern.charAt(i);
        if (letter.match(/[\d|\W]/)) {
            continue;
        } else {
            match = true;
            rex = new RegExp(letter, "i");
            if (!string.match(rex)) {
                match = false;
                break;
            }
        }
    }

    return match;
}

var s = "abcdef"
var p = "@F2D!=="

console.log(match(s, p));
于 2013-11-09T00:46:03.103 回答