This project exposes a Node.js library allowing to check if an answer given by a player to a quiz question is correct or not. To validate or invalidate the answer, the library relies on a list of valid acceptable answers and on a set of algorithmic rules detailed in a dedicated section below.
Installation using npm:
$ npm install quiz-answer-validator
Import:
// using ECMAScript module format
import answerIsValid from 'quiz-answer-validator';
// using CommonJS module format
const answerIsValid = require('quiz-answer-validator').default;
Usage:
- 1st param
{string}
-inputAnswer
: Player's input answer to be checked - 2nd param
{string[]}
-acceptableAnswers
: Array of acceptable answers - 3rd param
number
-[maxTypoRate=0.15]
: Maximum tolerated typo rate between 0 and 1 (default 0.15)
// With default typo rate
answerIsValid('Herve Matoux', ['Hervé Mathoux', 'Mathoux']); // true
answerIsValid('mathou', ['Hervé Mathoux', 'Mathoux']); // true
answerIsValid('Hervais Mattou', ['Hervé Mathoux', 'Mathoux']); // false
answerIsValid('big lebowski', ['The Big Lebowski']); // true
answerIsValid('The Big Lebowski', ['The Big Lebowski']); // true
answerIsValid('big leboski', ['The Big Lebowski']); // false
answerIsValid('10000000', ['10.000.000']); // true
answerIsValid('10,000.000', ['10.000.000']); // true
answerIsValid('10.000.000', ['10000000']); // true
answerIsValid('10.000.0000', ['10.000.000']); // false
// With custom typo rate
answerIsValid('The Big Lebowski', ['The Big Lebowski'], 0); // true
answerIsValid('The Big Lebowskii', ['The Big Lebowski'], 0); // false
answerIsValid('The Big Lebowsk', ['The Big Lebowski'], 0); // false
answerIsValid('bi lebow', ['The Big Lebowski'], 0.9); // true
"Purification" of the input strings:
- replacing capital letters;
- replacing diacritics;
- replacing ligatures;
- finally keeping only alphanumeric characters.
Checking the maximum tolerated typo rate:
- using Sørensen–Dice coefficient;
- invalidating the player's answer if the rate is greater than 15% (optionally customizable), relative to the closest acceptable answer.
Particular case:
- if an expected answer contains only digits, no typos should be allowed, so the typo rate is not calculated.
Tested with Node.js long-term support versions 14, 16 and 18.
Built for both ECMAScript and CommonJS module formats.
Automated CI test runs available.