sor*_*ist 6 php regex preg-match
我最近发现我用来验证用户输入的方法接受了一些我不是特别满意的值.我需要它来只接受自然数(1
,2
,3
等),而不非数字字符.
我的方法看起来像这样:
function is_natural($str)
{
return preg_match('/[^0-9]+$/', $str) ? false : $str;
}
Run Code Online (Sandbox Code Playgroud)
所以如果它找到除了一个完整的自然数之外的其他东西,它应该返回false.问题是,它接受类似"2.3"
甚至是字符串"2.3,2.2"
Cra*_*ent 17
也许你可以澄清"数字"和"数字"之间的区别?
无论如何,你可以使用
if (preg_match('/^[0-9]+$/', $str)) {
// contains only 0-9
} else {
// contains other stuff
}
Run Code Online (Sandbox Code Playgroud)
或者你可以使用
$str = (string) $str;
ctype_digit($str);
Run Code Online (Sandbox Code Playgroud)
Kor*_*tor 16
问题/^[0-9]+$/
是它也接受像这样的值0123
.正确的正则表达式是/^[1-9][0-9]*$/
.
ctype_digit()
遇到同样的问题.
如果你还需要包括零使用这个正则表达式: /^(?:0|[1-9][0-9]*)$/