我一直在实现一个简单的英语测验。为此,我们需要验证用户在输入字段中输入的答案。在当前的实现中,我正在将正确答案与用户的答案进行准确比较。就像,
HTML
<input type="text" id="answer" />
<button onclick="validate()">Validate</button>
Javascript
var question = "Do you like movies?",
answer = "No, I don't like movies.";
function validate() {
var userInput = document.getElementById('answer').value;
if(answer == userInput) {
console.log("correct");
} else {
console.log("wrong");
}
}
但我不想准确验证。例如,忽略区分大小写、逗号、撇号等。例如,如果用户输入,
i dont like movies
答案可能是正确的。我不知道如何开始以及从哪里开始。请大家帮忙。
最佳答案
一种选择是删除所有非单词字符和空格,并比较每个替换字符串的小写版本:
var question = "Do you like movies?",
answer = "No, I don't like movies.";
const normalize = str => str
.replace(/[^\w ]/g, '')
.toLowerCase();
function validate(userInput) {
const noramlizedInput = normalize(userInput)
const noramlizedAnswer = normalize(answer);
if (noramlizedInput == noramlizedAnswer) {
console.log("correct");
} else {
console.log("wrong");
}
}
validate('No i dont like movies');
validate("NO!!!!! I DON''t like movies.");
另一种选择是循环遍历 userInput
的所有可能的子字符串,并找出哪个子字符串与所需的答案
重叠最多,但这要复杂得多.
一个更简单的选择是检查有多少个重叠的单词:
var question = "Do you like movies?",
answer = "No, I don't like movies.";
const normalize = str => str
.replace(/[^\w ]/g, '')
.toLowerCase()
.split(/\s+/)
function validate(userInput) {
const noramlizedInputArr = normalize(userInput);
const noramlizedAnswerArr = normalize(answer);
const overlapCount = noramlizedInputArr.reduce((a, word) => (
a + Number(noramlizedAnswerArr.includes(word))
), 0);
console.log(overlapCount);
if (overlapCount >= 4) {
console.log("correct");
} else {
console.log("wrong");
}
}
validate('No i dont like movies');
validate("NO!!!!! I DON''t like movies.");
validate("i dont like movies.");
validate("Yes I like movies.");
关于Javascript - 如何知道有多少字符串与另一个字符串匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51702316/