Re: variable type - conversion/checking

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

 



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



[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