如果模式的所有单个字母都出现在字符串中,则获取Javascript以返回true

时间:2013-11-09 19:59:10

标签: javascript regex

我试图在不使用正则表达式的情况下完成以下操作:

  

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

2 个答案:

答案 0 :(得分: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 Demo

首先,我们从第一个参数创建一个allowedLetters对象作为所有小写字母a到z的子集。然后我们遍历第二个参数中的字符,如果找到一个不允许的字符,则返回false。否则我们会返回true

答案 1 :(得分:0)

还有一个解决方案:

function match(allowed, str) {
    str = str.toLowerCase();
    allowed = allowed.toLowerCase();
    for (var i = 0, l = str.length; i < l; i++) {
        if (!isAllowed(str[i], allowed)) {
            return false;
        }
    }
    return true;
}

function isAllowed(c, allowed) {
    // "char is not a letter OR char is allowed"
    return !isLetter(c) || allowed.indexOf(c) !== -1;
}

function isLetter(c) {
    c = c.charCodeAt(0);
    // "char >= a AND char <= z OR char >= A AND char <= Z"
    return c >= 97 && c <= 122 || c >= 65 && c <= 90;
}