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

时间:2014-11-10 03:35:05

标签: javascript

我试图检查是否可以检查分配给变量的用户输入以确保它是字符串,而不是数字。我尝试使用typeof(),但无论如何,即使用户输入了数字,用户输入也会被标记为字符串。例如:

var x = prompt("Enter a string of letters");
var y = typeof x;

if (y !== "string") {
    alert("You did not enter a string");
}

我可以使用哪些类似NaN函数,但对于字符串?

5 个答案:

答案 0 :(得分:5)

来自文档prompt

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");
}




答案 1 :(得分:3)

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,因为""是假的。

这个正则表达式也不允许空格。您可以在字符类中包含空格匹配器以允许它。

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:-2)

试试这段代码:

x = prompt("Enter a string of letters");

if (/^[a-z]+$/.test(x) {

  alert("You did not enter a string");

}
即使输入数字,

x的类型也将为字符串或null。