如果模式的所有单个字母都出现在字符串中,则返回结果为true

时间:2013-11-08 23:57:19

标签: javascript

如果模式的所有单个字母都出现在字符串中(无论顺序如何,区分大小写并忽略符号和数字),如何确保以下代码返回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));

2 个答案:

答案 0 :(得分: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!"));

或使用RegExp:

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̨̥̫͎̭ͯ̿̔̀ͅ字母或符号吗?

答案 1 :(得分:0)

似乎你没有过滤掉simbols。可能的解决方案

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