How to remove all non-numeric characters from a string?
Asked Answered
php
A

3

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);
Ancestress answered 2/8, 2011 at 10:3 Comment(0)
O
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);
Overnight answered 4/4, 2017 at 12:24 Comment(0)
B
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));
Boyle answered 2/8, 2011 at 16:40 Comment(4)
Downvoted since "123-456" returns "123" and not "123456" which I would like.Overnight
"123-456" isn't an int because it contains a dash. You're looking for str_replace('-', '', "123-456") php.net/manual/en/function.str-replace.php.Boyle
Did you read OP's question? He's trying to remove all "non numeric characters" including the removal of "plus and minus signs".Overnight
@Overnight 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.Boyle
E
-1

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

Echopraxia answered 26/5, 2023 at 11:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.