确保Window.prompt返回的值仅包含字母

Ensuring that the value returned by Window.prompt contains only letters

本文关键字:包含字 Window prompt 返回 确保      更新时间:2023-09-26

我正在尝试检查是否可以检查分配给变量的用户输入,以确保它是字符串,而不是数字。我尝试过使用typeof(),但不管怎样,用户输入都被标记为字符串,即使用户输入了一个数字。例如:

var x = prompt("Enter a string of letters");
var y = typeof x;
if (y !== "string") {
    alert("You did not enter a string");
}

是否有类似于NaN函数的东西可以用于字符串?

从单据提示

result = window.prompt(text, value);
  • 结果是一个字符串,包含用户输入的文本,或值null
  • text是要显示给用户的文本字符串。此参数为可选,如果在提示窗口
  • 是包含文本中显示的默认值的字符串输入字段。它是一个可选参数。请注意,在Internet中Explorer 7和8,如果不提供此参数,则字符串"未定义"是默认值

返回值是字符串null。在您的示例中,无论用户输入如何,y始终是字符串对象

在您的情况下,如果您想过滤用户输入的非字母,您可以使用正则表达式,如:

var x = prompt("Enter a string of letters");
if (!/^[a-zA-Z]+$/.test(x) || !x) {
  alert("You did not enter a string");
}

prompt返回的结果将始终是一个字符串(或可能是值null)。这就是该方法返回的结果。重要的是要记住,"123"实际上是一个字符串,尽管它也是一个数字的字符串表示。

所以,在你的情况下,你并没有真正试图确定它是否是一个字符串;你试图确保它不是一个数字。一般来说,你的问题是"一串字母"。

这只是意味着您需要验证生成的字符串是否只包含字母,而不包含数字或符号。你可以用一个简单的正则表达式:

var x = prompt("Enter a string of letters");
if (!x || !x.match(/^[a-z]+$/i)) {
    alert("Only letters are allowed");
}

这里有几点需要注意。这将不允许空白字符串"";如果需要允许,请在正则表达式中将+(一个或多个量词)更改为*(零或更多)。您还必须显式检查null(通过执行x != null),而不是使用!x,因为""是false。

此正则表达式也不允许使用空格。您可以在字符类中包含空格匹配器来实现这一点。

尝试isNaN(Number(x))检查。

var x=prompt("Enter a string");
if(!isNaN(Number(x)){
   alert("You are entering a number!"); 
}

如果用户取消,prompt()返回的值是字符串或null

您可能需要确认的是输入是按字母顺序排列的。您可以使用正则表达式来完成此操作,例如^[a-z]+$

试试这个代码:

x = prompt("Enter a string of letters");
if (/^[a-z]+$/.test(x) {
  alert("You did not enter a string");
}

即使您输入了一个数字,x的类型也将是字符串或null。