Req #77010 [Opn]: is_numeric with numeric strings suffixed with a string should return true

From: Date: Sat, 13 Oct 2018 21:24:37 +0000
Subject: Req #77010 [Opn]: is_numeric with numeric strings suffixed with a string should return true
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-217550@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77010&edit=1

 ID:                 77010
 Updated by:         requinix@php.net
 Reported by:        carusogabriel@php.net
 Summary:            is_numeric with numeric strings suffixed with a
                     string should return true
 Status:             Open
 Type:               Feature/Change Request
 Package:            Scripting Engine problem
 Operating System:   Irrelevant
 PHP Version:        Next major version
 Block user comment: N
 Private report:     N

 New Comment:

> we'd also consider a numeric string with a string suffixed
That I can understand.

Supporting non-numeric suffixes will conflict with https://wiki.php.net/rfc/invalid_strings_in_arithmetic
so I think this would have to go to an RFC.


Previous Comments:
------------------------------------------------------------------------
[2018-10-13 21:05:12] carusogabriel@php.net

> Numeric strings consist of optional sign, any number of digits, optional decimal part and
> optional exponential
> part. Thus +0123.45e6 is a valid numeric value.

Gotcha. So if we're going to take this further, we'd also consider a numeric string with a
string suffixed, for example: "7.3.0-beta1".

> (int)"x" === 0. Does that mean "x" is numeric?

Let's pretend I've never used that argument :P

------------------------------------------------------------------------
[2018-10-13 21:00:13] requinix@php.net

Well, according to the docs,
> Numeric strings consist of optional sign, any number of digits, optional decimal part and
> optional exponential
> part. Thus +0123.45e6 is a valid numeric value.

> I current judge everything that we can cast for an integer number, for example, as numeric
> numbers.
(int)"x" === 0. Does that mean "x" is numeric?

------------------------------------------------------------------------
[2018-10-13 20:56:43] carusogabriel@php.net

@requinix What do we consider as numbers, better, as numeric numbers in PHP?

I current judge everything that we can cast for an integer number, for example, as numeric numbers.

------------------------------------------------------------------------
[2018-10-13 20:49:47] requinix@php.net

"2.14.0-DEV" doesn't look like any number I've seen before.

So... what, if it starts with a digit then it's numeric? Should "1a" be numeric?

------------------------------------------------------------------------
[2018-10-13 20:46:22] carusogabriel@php.net

Description:
------------
As discussed in https://github.com/phpstan/phpstan/issues/1497,
there're some strings containing castable integers, for example: https://3v4l.org/Ogral, that reports as false when passing it to
is_numeric.

I'm opening this bug ticket to discuss if we need to consider this a bug and target all active
branches, or consider as a Feature Request and propose this as a new feature to the next minor
version of PHP.

Test script:
---------------
<?php

var_dump(is_numeric('2.14.0-DEV'));

Expected result:
----------------
bool(true)

Actual result:
--------------
bool(false)


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=77010&edit=1


Thread (7 messages)

« previous php.bugs (#217550) next »