我试图在不使用正则表达式的情况下完成以下操作:
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!"));
答案 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
首先,我们从第一个参数创建一个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;
}