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