function palindrome(str) {
var strReverse=str.toLowerCase().replace(/\W+/g,'').split('').reverse().join('');
if(strReverse===str)
return true;
else
return false;
}
该程序应检查以下回文:
palindrome("eye") should return true.
palindrome("race car") should return true.
palindrome("not a palindrome") should return false.
palindrome("A man, a plan, a canal. Panama") should return true.
palindrome("never odd or even") should return true.
palindrome("nope") should return false.
palindrome("almostomla") should return false.
palindrome("My age is 0, 0 si ega ym.") should return true.
palindrome("1 eye for of 1 eye.") should return false.
palindrome("0_0 (: /-\ :) 0-0") should return true.
但它不适用于多串线。我认为这是因为RegEx
,但我似乎无法找到完全错误。
答案 0 :(得分:2)
您在创建i18n_patterns
时使用toLowerCase
,然后将其与strReverse
进行比较。但是str
仍然会包含大写字符。此外,您将保留str
中的非字母字符。
您还需要移除str
以使最后一个工作正常,而_
将不会自行执行。
您需要先准备\W
,然后创建它的反转版本,并进行检查:
str
直播示例:
function palindrome(str) {
var strReverse;
str = str.toLowerCase().replace(/\W|_+/g,'');
strReverse = str.split('').reverse().join('');
return strReverse === str;
}
function palindrome(str) {
var strReverse;
str = str.toLowerCase().replace(/\W|_+/g,'');
strReverse = str.split('').reverse().join('');
return strReverse === str;
}
function test(str, expectedResult) {
var result = palindrome(str);
var p = document.createElement('p');
p.className = !result == !expectedResult ? "good" : "bad";
p.appendChild(document.createTextNode(str));
document.body.appendChild(p);
}
test("eye", true);
test("race car", true);
test("not a palindrome", false);
test("A man, a plan, a canal. Panama", true);
test("never odd or even", true);
test("nope", false);
test("almostomla", false);
test("My age is 0, 0 si ega ym.", true);
test("1 eye for of 1 eye.", false);
test("0_0 (: /-\ :) 0-0", true);
.good {
color: green;
}
.bad {
color: #d00;
}
答案 1 :(得分:2)
尝试此功能
function palindrome(str) {
str=str.toLowerCase().replace(/[^A-Za-z]+/g, '');
var strReverse = str.split('').reverse().join('');
if(strReverse===str)
return true;
else
return false;
}
您的代码中的问题是,当您将strReverse
与str
进行比较时,strReverse
已格式化,但str
未进行格式化。就像你没有从str删除特殊字符和空格和数字一样,你没有把它lowercase
等等。