我试图检查是否可以检查分配给变量的用户输入以确保它是字符串,而不是数字。我尝试使用typeof()
,但无论如何,即使用户输入了数字,用户输入也会被标记为字符串。例如:
var x = prompt("Enter a string of letters");
var y = typeof x;
if (y !== "string") {
alert("You did not enter a string");
}
我可以使用哪些类似NaN
函数,但对于字符串?
答案 0 :(得分:5)
来自文档prompt
result = window.prompt(text, value);
返回值为字符串或 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。