Re: variable type - conversion/checking
| From: | tamouse mailing lists | Date: | Fri, 15 Mar 2013 09:57:00 +0000 |
| Subject: | Re: variable type - conversion/checking | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-320559@lists.php.net to get a copy of this message | ||
On Fri, Mar 15, 2013 at 3:55 AM, Peter Ford <pete@justcroft.com> wrote:
> On 15/03/13 06:21, Jim Lucas wrote:
>>
>> On 3/14/2013 4:05 PM, Matijn Woudt wrote:
>>>
>>> On Thu, Mar 14, 2013 at 11:44 PM, Jim Lucas <lists@cmsws.com> wrote:
>>>
>>>> On 03/14/2013 11:50 AM, Samuel Lopes Grigolato wrote:
>>>>
>>>>> Something like "if (is_numeric($var)&& $var == floor($var))"
>>>>> will do
>>>>> the
>>>>>
>>>>> trick. I don't know if there's a better (more elegant) way.
>>>>>
>>>>>
>>>>> On Thu, Mar 14, 2013 at 3:09 PM, Matijn Woudt<tijnema@gmail.com> wrote:
>>>>>
>>>>> On Thu, Mar 14, 2013 at 7:02 PM, georg<georg.chambert@telia.com**>
>>>>>>
>>>>>> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>>
>>>>>>>
>>>>>>> I have tried to find a way to check if a character string is
>>>>>>> possible to
>>>>>>> test whether it is convertible to an intger !
>>>>>>>
>>>>>>> any suggestion ?
>>>>>>>
>>>>>>> BR georg
>>>>>>>
>>>>>>
>>>>>>
>>>>>> You could use is_numeric for that, though it also accepts floats.
>>>>>>
>>>>>> - Matijn
>>>>>>
>>>>>>
>>>>>
>>>> for that type of test I have always used this:
>>>>
>>>> if ( $val == (int)$val ) {
>>>>
>>>>
>>>> http://www.php.net/manual/en/**language.types.integer.php#**
>>>>
>>>>
>>>> language.types.integer.casting<http://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting>
>>>>
>>>>
>>>>
>>> I hope you're not serious about this...
>>>
>>> When comparing a string and an int, PHP will translate the string to int
>>> too, and of course they will always be equal then.
>>> So:
>>> $a = "abc";
>>> if($a == (int)$a) echo "YES";
>>> else echo "NO";
>>> Will always return YES.
>>>
>>> - Matijn
>>>
>>
>> Hmmmm... Interesting. Looking back at my code base where I thought I was
>> doing that, turns out the final results were not that, but this:
>>
>> $value = "asdf1234";
>>
>> if ( $value === (string)intval($value) ) {
>>
>> Looking back at the OP's request and after a little further searching,
>> it seems that there might be a better possible solution for what the OP
>> is requesting.
>>
>> <?php
>>
>> $values = array("asdf1234", "123.123", "123");
>>
>> foreach ( $values AS $value ) {
>>
>> echo $value;
>>
>> if ( ctype_digit($value) ) {
>> echo ' - is all digits';
>> } else {
>> echo ' - is NOT all digits';
>> }
>> echo '<br />'.PHP_EOL;
>> }
>>
>> returns...
>>
>> asdf1234 - is NOT all digits
>> 123.123 - is NOT all digits
>> 123 - is all digits
>>
>> http://www.php.net/manual/en/function.ctype-digit.php
>>
>> An important note:
>>
>> This function expects a string to be useful, so for example passing in
>> an integer may not return the expected result. However, also note that
>> HTML forms will result in numeric strings and not integers. See also the
>> types section of the manual.
>>
>> --
>> Jim
>>
>
> Integers can be negative too: I suspect your test would reject a leading
> '-'...
For my money,
is_numeric() does just what I want.