Skip to content

Home

Check if a string is a yes/no answer with JavaScript

If you've spent any amount of time using your computer's terminal, chances are you've been asked to confirm an action by typing y or n and pressing Enter.

Are you sure you want to continue? [y/n]

Implementing this functionality takes some careful consideration in order to get it right.

For starters, your boolean question must understand both y/n and yes/no answers. The easiest way to handle this would be a regular expression for each answer, such as (y|yes) and (n|no).

Additionally, you want to invalidate user input that doesn't match the expected answers. For example, if the user types yess or nope, that is not a valid answer and the result should use the default value specified. Adding positional anchors to the regular expressions, such as ^(y|yes)$ and ^(n|no)$, will ensure that the entire string is matched.

Finally, you want the check to be case-insensitive, so that Y and y are treated the same. You can do this by adding the i flag to your regular expressions, such as /^(y|yes)$/i and /^(n|no)$/i.

Putting it all together, you can use RegExp.prototype.test() and the ternary operator (?) to check if the string matches the expected answers and return the appropriate boolean value.

const yesNo = (val, def = false) =>
  /^(y|yes)$/i.test(val) ? true : /^(n|no)$/i.test(val) ? false : def;

yesNo('Y'); // true
yesNo('yes'); // true
yesNo('No'); // false
yesNo('Foo', true); // true

More like this

Start typing a keyphrase to see matching snippets.