使用JavaScript检查字符串是否为是/否答案

如果你在计算机的终端上花费了一定的时间,那么你可能会被要求通过输入yn并按下Enter来确认一个操作。

```text [终端] 你确定要继续吗?[y/n]


实现这个功能需要仔细考虑才能做到正确。

首先,你的布尔问题必须理解`y`/`n`和`yes`/`no`两种答案。处理这个问题最简单的方法是为每个答案使用一个**正则表达式**,例如`(y|yes)`和`(n|no)`。

此外,你希望**使不匹配预期答案的用户输入无效**。例如,如果用户输入`yess`或`nope`,那就不是一个有效的答案,结果应该使用指定的**默认值**。通过在正则表达式中添加**位置锚点**,例如`^(y|yes)$`和`^(n|no)$`,可以确保整个字符串被匹配。

最后,你希望检查是**不区分大小写**的,这样`Y`和`y`会被视为相同。你可以通过在正则表达式中添加`i`标志来实现,例如`/^(y|yes)$/i`和`/^(n|no)$/i`。

将所有这些组合在一起,你可以使用`RegExp.prototype.test()`和三元运算符(`?`)来检查字符串是否与预期答案匹配,并返回相应的布尔值。

```js
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