Re: variable type - conversion/checking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




tamouse mailing lists <tamouse.lists@xxxxxxxxx> wrote:

>On Fri, Mar 15, 2013 at 4:00 PM, Ashley Sheridan
><ash@xxxxxxxxxxxxxxxxxxxx>wrote:
>
>> **
>> On Fri, 2013-03-15 at 04:57 -0500, tamouse mailing lists wrote:
>>
>> On Fri, Mar 15, 2013 at 3:55 AM, Peter Ford <pete@xxxxxxxxxxxxx>
>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@xxxxxxxxx>
>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@xxxxxxxxx> wrote:
>> >>>>>
>> >>>>> On Thu, Mar 14, 2013 at 7:02 PM,
>georg<georg.chambert@xxxxxxxxx**>
>> >>>>>>
>> >>>>>> 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.
>>
>>
>>
>> The thing is, is_numeric() will not check if a string is a valid int,
>but
>> any valid number, including a float.
>>
>> For something like this, wouldn't a regex be better?
>>
>> if(preg_match('/^\-?\d+$/', $string))
>>     echo int
>>
>>   Thanks,
>> Ash
>> http://www.ashleysheridan.co.uk
>>
>>
>>
>That is so about is_numeric(), but once I know it's a numeric, coercing
>it
>to just an int is easy. *Validating*, rather than just assuring, that a
>string is an integer is another matter; if you need to give feedback to
>the
>user, etc., in which case a Regex is better.
>
>(One small nit, + is possible on integers, too.)

The op wasn't about casting a string to an int but detecting if a string was just a string representation of an int. Hence using a regex to determine that. Regular expressions are not just about giving feedback to the user.

Thanks,
Ash
http://www.ashleysheridan.co.uk

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux