检查字符串是否为整数

4

我想验证一个输入字段。用户应该输入至少10位数字的电话号码。

因此,我需要检查非法字符。最好只检查输入是否为整数。

我想到了以下代码,但它不起作用(n将是字符串)。

function isInt(n){
    return typeof n== 'number' && n%1==0;
}

有什么想法吗?

2
如果用户输入了类似于 "555-1212分机323" 这样的内容,会怎么样? - Diodeus - James MacFarlane
2
http://www.smartwebby.com/DHTML/phone_no_validation.asp - Shakti Singh
5个回答

12

你可以像这样进行一次测试:

input.length >= 10 && /^[0-9]+$/.test(input)

如果字符串中包含非数字字符或者字符串长度小于10个字符,则会导致失败。


1
+1 如果回答实际问题(尽管最好检查一下它是否已经是一个数字)。但正如Diodeus所指出的,电话号码不是整数,引导OP另寻他路会更好。 - T.J. Crowder
4
只需使用正则表达式 ^[0-9]{10,}$ 就足够了。 - darioo
这是一个正则表达式方法,返回一个布尔值,指示正则表达式是否通过。在此处查看更多信息:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test - Martin Jespersen

3

这应该可以工作((input - 0) 会自动尝试将值转换为数字):

function isInt(input){
   return ((input - 0) == input && input % 1==0);
}

已经有一个关于这个问题的SO问答: 在JavaScript中验证十进制数-IsNumeric()


1

验证电话号码比检查输入是否为整数要复杂一些。例如,电话号码可以以零开头,因此它不是技术上的整数。此外,用户可能会输入破折号:例如:

00 34 922-123-456

所以,关于验证它,您有几个选项:

  • 使用正则表达式进行验证,请查看:

    http://regexlib.com/

    这个网站将有数百个示例

  • 使用循环逐个检查每个字符,即字符是否为整数或破折号

我建议使用前者,因为后者取决于用户的一致输入,而您不会得到那样的输入。


1

这可能对你来说有些过度,但 Google 最近宣布了一个用于电话验证的。Java 和 Javascript 变体都可用。


0
为什么不在你的函数中使用以下代码作为返回值呢? return (+val === ~~val && null !== val); 这是 JavaScript 控制台的输出。
> +"foobar" === ~~"foobar"
  false
> +1.6 === ~~1.6
  false
> +'-1' === ~~'-1'
  true
> +'-1.56' === ~~'-1.56'
  false
> +1 === ~~1
  true
> +-1 === ~~-1
  true
> +null === ~~null // this is why we need the "&& null !== val" in our return call
  true 

我知道这是一个晚回答,但既然我也在寻找这个,它可能会帮助其他人。 - papas-source

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接