繁体   English   中英

正则表达式只验证自然数?

[英]Regex to validate only natural numbers?

我最近发现我用来验证用户输入的方法接受了一些我不是特别满意的值。 我需要它只能接受自然数( 123 ,等),而不非数字的字符。

我的方法看起来像这样:

function is_natural($str)
{
   return preg_match('/[^0-9]+$/', $str) ? false : $str;
}

所以如果它找到除了一个完整的自然数之外的其他东西,它应该返回false。 问题是,它接受像"2.3"甚至"2.3,2.2"这样的字符串

也许你可以澄清“数字”和“数字”之间的区别?

无论如何,你可以使用

if (preg_match('/^[0-9]+$/', $str)) {
  // contains only 0-9
} else {
  // contains other stuff
}

或者你可以使用

$str = (string) $str;
ctype_digit($str);

/^[0-9]+$/的问题在于它也接受像0123这样的值。 正确的正则表达式是/^[1-9][0-9]*$/

ctype_digit()遇到同样的问题。

如果你还需要包括零使用这个正则表达式: /^(?:0|[1-9][0-9]*)$/

当发票编号如“000000196”必须通过ctype_digit时,我遇到了ctype_digit的问题。

所以我用了一个:

if (preg_match('/^[1-9][0-9]?$/', $str)) {
  // only integers
} else {
  // string
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM