如何使用PHP验证仅针对数字的文本输入

如何使用PHP验证仅针对数字的文本输入,php,regex,html,validation,numbers,Php,Regex,Html,Validation,Numbers,我有一个HTML5表单来收集数据,其中一个输入是电话号码。我使用php验证用户输入的所有数据。我想验证用户是否使用preg_match()函数只输入了数字(从0到9)。我使用“/[^0-9]/”作为正则表达式模式,但出于某种原因,它只允许验证字符(从a到z)。 为什么会发生这种情况?请尝试以下方法: '/^[0-9]*$/''^'仅当字符串是第一个字符时才指示字符串的开头。否则它的意思是“不”。所以你的表达式匹配的不是数字() 正确的表达式应该是另一个答案中提到的“/^[0-9]*$/” 试试这

我有一个HTML5表单来收集数据,其中一个输入是电话号码。我使用php验证用户输入的所有数据。我想验证用户是否使用preg_match()函数只输入了数字(从0到9)。我使用“/[^0-9]/”作为正则表达式模式,但出于某种原因,它只允许验证字符(从a到z)。 为什么会发生这种情况?

请尝试以下方法:
'/^[0-9]*$/'

'^'仅当字符串是第一个字符时才指示字符串的开头。否则它的意思是“不”。所以你的表达式匹配的不是数字()


正确的表达式应该是另一个答案中提到的“/^[0-9]*$/”

试试这个:

/[0-9]+/
它匹配任何数字

function num_only($num){
 // will return only numbers in a string
  return preg_replace("/[^0-9,.]/", "", $num);
}

//将检查字符串是否为数字


这是可行的,但为什么不改用速记
\d+
?或者更明确地说-
[:digit:
@AmalMurali
\d
匹配
[0-9]
和其他数字,如
东部阿拉伯数字
。由于问题只涉及0到9之间的数字,因此在这里使用
[0-9]
@Dr.Kameleon更合适。您应该使用
^$
分隔符。否则,您的模式也可能匹配abc012345xyz,而这不是OP想要的
function numeric($num){
    // will check if is numeric
    $int = $num;
    if(empty($int) or strcmp(preg_replace("/[^0-9,.]/", "", $int), $num) != 0 )
    {
        return false;   

    }
    else return true;
}
is_numeric($number);