如何从字符串中删除所有非数字字符?

6

我正在尝试从我的代码中删除所有非数字字符,但是FILTER_SANITIZE_NUMBER_INT允许加号和减号。

我该如何使用PHP将它们删除,以便将其添加到我的代码中?

这是我的代码。

$a = filter_var($a, FILTER_SANITIZE_NUMBER_INT);
3个回答

4
我选择了以下解决方案。大写的“D”代表“非数字”。
public static function sanitize_integer($str)
{
    return (int) preg_replace('/\D/', '', $str);
}

如果您的输入字符串可能有前导零,而您希望保留这些前导零,请不要将变异后的字符串转换为整数。

return preg_replace('/\D/', '', $str);

为了进行更少的替换(但是得到相同的结果),在每次替换期间使用+(一个或多个量词)来删除多个连续的非数字字符。
return preg_replace('/\D+/', '', $str);

3
在这种情况下,您可能希望将结果转换为int以去除加号(+)符号。
$a = (int) filter_var($a,FILTER_SANITIZE_NUMBER_INT);

如果你想去掉负号(-),得到数字的绝对值,可以使用PHP的abs()函数:
$a = abs((int) filter_var($a,FILTER_SANITIZE_NUMBER_INT));

因为“123-456”返回的是“123”,而不是我想要的“123456”,所以我被踩了。 - Sasse
"123-456" 不是整数因为它包含了一个破折号。您需要使用 str_replace('-', '', "123-456") 函数。参考链接:http://php.net/manual/en/function.str-replace.php。 - bitsoflogic
你看了OP的问题吗?他试图删除所有“非数字字符”,包括“加号和减号符号”。 - Sasse
@Sasse 我想当时我对它的解释有所不同,因为他似乎澄清了他试图去除前导加号或减号。话虽如此,你的解释和答案似乎更加准确。我肯定也会使用正则表达式来解决它。 - bitsoflogic

0
假设您正在通过JS事件从输入字段获取字符串文本,则可以执行以下操作:

    
   const inputTag = document.getElementById('input-id');

   //here you may check above variable if not null before calling 
   //  addEventListener on it

   inputTag.addEventListener('blur', (e)=>{   
      var inputText = e.target.value;
      inputText = inputText.replace(/\s/g,'');
   });

这个正则表达式 /\s/g 将在全局范围内搜索您的字符串中的空格,保证可以完成任务。


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