检查输入是数字还是字母javascript
Posted
技术标签:
【中文标题】检查输入是数字还是字母javascript【英文标题】:Check if input is number or letter javascript 【发布时间】:2013-08-05 05:08:06 【问题描述】:我在 html 和 javascript 中使用表单。我希望仅当用户输入 LETTER 并单击 submit
时才会弹出警报。
所以我有 HTML 代码:
<form name="myForm" action="" onsubmit="return checkInp()" method="post">
First name: <input type="text" name="age">
<input type="submit" value="Submit">
还有 javascript 代码:
function checkInp()
var x=document.forms["myForm"]["age"].value;
if (x consists of any letters) // this is the code I need to change
alert("Must input numbers");
return false;
【问题讨论】:
定义“字母”。 “é”是字母吗? “α”呢?如果您指的是从 A 到 Z 和从 a 到 z 的 Ascii 字母,请这样说。 您可能还想更改 HTML。将<input type="text" />
切换为<input type="number" min="0" max="125" step="1" />
。在现代浏览器中,这将检查没有任何 JS 的数字输入。
【参考方案1】:
你可以使用 isNaN()。当数据不是数字时返回true。
var data = 'hello there';
if(isNaN(data))
alert("it is a valid number");
else
alert("it is not a valid number");
【讨论】:
isNaN(true) 返回 false【参考方案2】:我知道这篇文章很旧,但它是我搜索时弹出的第一个。我尝试了@Kim Kling RegExp,但它失败了。同样在找到这个论坛之前,我已经尝试了这里列出的几乎所有其他变体。最后,除了我创建的这个之外,它们都没有工作。它工作正常,而且它是 es6:
const regex = new RegExp(/[^0-9]/, 'g');
const val = document.forms["myForm"]["age"].value;
if (val.match(regex))
alert("Must be a valid number");
【讨论】:
【参考方案3】:谢谢,我今天使用@str8up7od 答案创建了一个函数,该函数还检查输入是否为空:
function is_number(input)
if(input === '')
return false;
let regex = new RegExp(/[^0-9]/, 'g');
return (input.match(regex) === null);
【讨论】:
【参考方案4】:使用Regular Expression 仅匹配字母。如果您需要做一些更复杂的事情,比如确保它是一定数量的数字,了解这些知识也是很好的。
function checkInp()
var x=document.forms["myForm"]["age"].value;
var regex=/^[a-zA-Z]+$/;
if (!x.match(regex))
alert("Must input string");
return false;
最好是否认数字以外的任何东西:
function checkInp()
var x=document.forms["myForm"]["age"].value;
var regex=/^[0-9]+$/;
if (x.match(regex))
alert("Must input numbers");
return false;
【讨论】:
您是否在第二个代码 sn-p 中缺少!
之前的 x.match(regex)
?
这是最干净的解决方案
或者你的意思是regex.test(x)
?【参考方案5】:
如果您关心的是实数而不是字符串中的数字,那么最好和现代的方法是 typeof(变量)。例如:
var a = 1;
var b = '1';
typeof a: // Output: "number"
typeof b: // Output: "string
【讨论】:
【参考方案6】:我认为最简单的方法是使用字符串创建一个Number
对象,并在Number
类本身提供的isInteger
函数的帮助下检查是否。
Number.isInteger(Number('1')) //true
Number.isInteger(Number('1 mango')) //false
Number.isInteger(Number(1)) //true
Number.isInteger(Number(1.9)) //false
【讨论】:
当心号码(''); //0Number.isInteger('1')
不会返回 true。它返回假。它仍将读取为字符串。
通过Number('1')
【参考方案7】:
只需除以 1 的余数,即 x%1。如果余数为 0,则表示 x 是整数。否则,您必须显示消息“必须输入数字”。即使在字符串、十进制数字等情况下也可以使用。
function checkInp()
var x = document.forms["myForm"]["age"].value;
if ((x%1) != 0)
alert("Must input numbers");
return false;
【讨论】:
【参考方案8】:更好的(无错误)代码如下:
function isReallyNumber(data)
return typeof data === 'number' && !isNaN(data);
这也将处理空字符串。另一个原因,isNaN("12")
等于false
,但"12"
是字符串而不是数字,所以它应该是true
。最后,您可能会感兴趣的bonus link。
【讨论】:
另一个参考:***.com/questions/14636536/…【参考方案9】:您可以使用 isNaN 函数来确定一个值是否不会转换为数字。示例如下:
function checkInp()
var x=document.forms["myForm"]["age"].value;
if (isNaN(x))
alert("Must input numbers");
return false;
【讨论】:
当心空字符串:isNaN('') === false;
#jsrage
不要这样做,像'0xFF'和'2e32'这样的字符串会通过这个验证。
您不能使用它来检查数字。如果字母跟在数字后面,则失败。试试这个“3a”。
最疯狂的事实是NAN
也是一个数字:(
@StormcrowSX ***.com/questions/14636536/… 怎么样?【参考方案10】:
您可以使用isNaN 函数。如果数据不是数字,则返回 true。应该是这样的:
function checkInp()
var x=document.forms["myForm"]["age"].value;
if (isNaN(x)) // this is the code I need to change
alert("Must input numbers");
return false;
注意:isNan 将 10.2 视为有效数字。
【讨论】:
*isNaN - 是的,这可能是个问题,有没有办法只输入整数?感谢您的回答。 仅限整数,请使用正则表达式并查看我的答案。【参考方案11】:试试这个:
if(parseInt("0"+x, 10) > 0)/* x is integer */
【讨论】:
或者干脆if ( (x >> 0) > 0 )
也工作得很好,除了十进制数字仍然存在问题。不过感谢一百万的回答。
你们能详细解释一下它是如何工作的吗? >>
operator 是什么意思?提前致谢
不幸的是,它给出了 32 表示“32!”而不是错误。以上是关于检查输入是数字还是字母javascript的主要内容,如果未能解决你的问题,请参考以下文章