-1

正規表現を使用せずに次のことを達成しようとしています:

match("abcdef","@C2D!") は true を返します

match("abcdef","CAfe") は true を返します

match("abcdef","CG") は false を返します

これは私がこれまでに持っているコードです - jsfiddle here: http://jsfiddle.net/5UCwW/1/

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

alert(match("abcdef", "@C2D!"));
4

2 に答える 2

1

要求に応じて、正規表現を使用しないソリューションを次に示します。

function testAllowedLetters(allowedString, testString) {
    var i, allowedLetters;

    allowedString = allowedString.toLowerCase();
    allowedLetters = {a:0,b:0,c:0,d:0,e:0,f:0,g:0,h:0,i:0,j:0,k:0,l:0,m:0,n:0,o:0,p:0,q:0,r:0,s:0,t:0,u:0,v:0,w:0,x:0,y:0,z:0};
    for (i = 0; i < allowedString.length; i++) {
        allowedLetters[allowedString[i]] = 1;
    }

    testString = testString.toLowerCase();
    for (i = 0; i < testString.length; i++) {
        if (allowedLetters[testString[i]] === 0) {
            return false;
        }
    }

    return true;
}

console.log(testAllowedLetters("abcdef", "@C2D!")); // true
console.log(testAllowedLetters("abcdef", "CG")); // false

jsFiddle デモ

allowedLetters最初に、最初の引数から a から z までのすべての小文字のサブセットとしてオブジェクトを作成します。次に、2 番目の引数の文字を繰り返し処理し、false許可されていない文字が見つかった場合は戻ります。それ以外の場合は を返しtrueます。

于 2013-11-09T20:24:09.567 に答える