how to check if PHP variable contains non-numbers?

前端 未结 10 2082
执笔经年
执笔经年 2021-02-18 22:09

I just want to know the method to check a PHP variable for any non-numbers and if it also detects spaces between characters? Need to make sure nothing weird gets put into my for

10条回答
  •  花落未央
    2021-02-18 22:15

    Assuming you want only (and only) valid integers and you dont want users to mess up with your data and database with hexadecimal or binary or any other form of numbers then you can always use this method:

    if(((string) (int) $stringVariable) === $stringVariable) {
        // Thats a valid integer :p
    }
    else {
        // you are out of luck :(
    }
    

    The trick is simple. It casts the variable of type string to integer type and then casts it back to string. Super fast, Super simple.

    For the sake of testing I've prepared a test:

    '1337' is pure integer.
    '0x539' is not.
    '02471' is not.
    '0000343' is not.
    '0b10100111001' is not.
    '1337e0' is not.
    'not numeric' is not.
    'not numeric 23' is not.
    '9.1' is not.
    '+655' is not.
    '-586' is pure integer.
    

    The only place that this method falls short is on negative numbers, so you need to check that beside this (use ((string) (int) $stringVariable) === $stringVariable && $stringVariable[0] !== "-").

    Now I thought that the preg_match method is the best. but in any project that deals with users, speed is an important factor. so I prepared a benchmarking test doing that above test for 500,000 times and the results were amazing:

    My own invented method took only:
    6.4700090885162
    seconds to complete as compared to preg_match which took:
    77.020107984543 seconds to complete this test!

提交回复
热议问题