javascript - Javascript - 如何知道另一个字符串中有多少字符串匹配?
问题描述
我一直在实施一个简单的英语测验。在那,我们需要验证用户在输入字段中输入的答案。在当前的实现中,我正在将正确答案与用户的答案进行精确比较。喜欢,
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");
}
}
但我不想完全验证。喜欢,忽略区分大小写、逗号、撇号等。例如,如果用户输入,
我不喜欢电影
答案可能是正确的。我不知道如何开始以及从哪里开始。任何人请帮忙。
解决方案
一种选择是去除所有非单词字符和空格,并比较每个替换字符串的小写版本:
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
并找出与期望重叠最多的子字符串answer
,但这要复杂得多。
一个更简单的选择是检查有多少重叠的单词:
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.");
推荐阅读
- python - 如何在 chromedriver 中使用 js-flags?
- ios - 当多行标签的字体调整以适合可用宽度时,如何使多行标签的高度正确?
- python - 如何使用 beautifulsoup 在下拉列表中获取所选值?
- c++ - 如何将输出写入Qt中特定标签旁边的状态栏
- javascript - 具有日期升序的Javascript数组过滤器并删除重复项
- sql - 从 sql server management studio 中的对象资源管理器选项卡中获取数据的快捷方式
- perl - Perl - 将字符串转换为日期时间
- python - 如何正确测试从数据库填充组合框的函数
- javascript - 我试图阻止按 Enter 时的默认行为,但它不起作用
- python - pandas 中的窗口化操作 + 多重聚合