6

I'm trying to remove all non-numeric characters from my code, but FILTER_SANITIZE_NUMBER_INT allows plus and minus signs.

How can I remove them using PHP that I can add to my code?

Here is my code.

$a = filter_var($a, FILTER_SANITIZE_NUMBER_INT);
Braiam
  • 1
  • 11
  • 47
  • 78

3 Answers3

4

I went with the following solution. Uppercase "D" stands for "non-digit".

public static function sanitize_integer($str)
{
    return (int) preg_replace('/\D/', '', $str);
}

If your input string may have leading zeros that you wish to retain, do not cast the mutated string as an integer.

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

To make fewer replacements (but the same result), use the + (one or more quantifier) to remove multiple consecutive non-numeric characters during each replacement.

return preg_replace('/\D+/', '', $str);
mickmackusa
  • 43,625
  • 12
  • 83
  • 136
Sasse
  • 1,108
  • 10
  • 14
3

In this case, you may want to consider simply casting the result to an int to remove the plus (+) sign.

$a = (int) filter_var($a,FILTER_SANITIZE_NUMBER_INT);

If you need to drop the minus (-) sign as well, effectively getting the number's absolute value, use PHP's abs() function:

$a = abs((int) filter_var($a,FILTER_SANITIZE_NUMBER_INT));
bitsoflogic
  • 1,164
  • 2
  • 12
  • 28
  • Downvoted since "123-456" returns "123" and not "123456" which I would like. – Sasse Feb 24 '17 at 09:20
  • "123-456" isn't an int because it contains a dash. You're looking for `str_replace('-', '', "123-456")` http://php.net/manual/en/function.str-replace.php. – bitsoflogic Feb 24 '17 at 21:49
  • Did you read OP's question? He's trying to remove all "non numeric characters" including the removal of "plus and minus signs". – Sasse Apr 04 '17 at 12:20
  • @Sasse I guess I interpreted it differently at the time, since he seemed to clarify he was trying to strip a leading plus or minus sign. That being said, your interpretation and answer does seem more spot on. I'd definitely use regex to solve it as well. – bitsoflogic Apr 04 '17 at 14:21
0

Assume you are getting your string text from input field on js event then you can do this

    
   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,'');
   });

this regex /\s/g will search at global level for spaces in your string guranteed this will do the job