2013-11-09 11 views
-1

我试图完成,而无需使用正则表达式如下:获取JavaScript以返回true,如果所有模式的各个字母出现在字符串

比赛(“ABCDEF”,“@ C2D!”)返回true

比赛( “ABCDEF”, “咖啡”)返回true

比赛( “ABCDEF”, “CG”)返回false

这是我到目前为止的代码 - 的jsfiddle这里: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!")); 
+0

为什么你想避免正则表达式? –

+0

@ mrrogers我们没有在课程中教过它 - 所以我们不允许使用它 – theshizy

回答

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

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; 
} 
相关问题