Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NumberFormatter fails to parse invalid numbers #14430

Closed
aledeg opened this issue Apr 21, 2015 · 8 comments
Closed

NumberFormatter fails to parse invalid numbers #14430

aledeg opened this issue Apr 21, 2015 · 8 comments

Comments

@aledeg
Copy link

aledeg commented Apr 21, 2015

I was trying to validate my form entries using the Type validation with integer type and I get the following error:

Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: NumberFormatter::parse(): Number parsing failed"

This error does not occur all the time, only when the value to format does not start with a number. So 123dd will return an error but dd123 will fail.

For more information, you could have a look on my stackoverflow question

I am using Symfony 2.6.6. I checked the code for the parse method in the 2.7 and 2.8 branches and it appears to be the same as in branch 2.6.

Edit 1:

To answer a deleted comment about my ICU version, here is the output of the command php -ri intl

intl

Internationalization support => enabled
version => 1.1.0
ICU version => 51.2
ICU Data version => 51.2

Directive => Local Value => Master Value
intl.default_locale => en_utf8 => en_utf8
intl.error_level => 2 => 2
intl.use_exceptions => 0 => 0

Edit 2:

Here is the content of my log file:

[2015-04-21 13:21:56] request.INFO: Matched route "my_api_create_application" (parameters: "_controller": "My\ApiBundle\Controller\PermitApplicationsController::createAction", "_format": "json", "_route": "my_api_create_application") [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "FOS\RestBundle\EventListener\FormatListener::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "FOS\RestBundle\EventListener\BodyListener::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.request" to listener "Nelmio\ApiDocBundle\EventListener\RequestListener::onKernelRequest". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController". [] []
[2015-04-21 13:21:56] event.DEBUG: Notified event "kernel.controller" to listener "FOS\RestBundle\EventListener\ViewResponseListener::onKernelController". [] []
[2015-04-21 13:21:57] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: NumberFormatter::parse(): Number parsing failed" at C:\Work\Sources\project\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer.php line 187 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ContextErrorException(code: 0): Warning: NumberFormatter::parse(): Number parsing failed at C:\\Work\\Sources\\project\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\Form\\Extension\\Core\\DataTransformer\\NumberToLocalizedStringTransformer.php:187)"} []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "FOS\RestBundle\EventListener\FormatListener::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "FOS\RestBundle\EventListener\BodyListener::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.request" to listener "Nelmio\ApiDocBundle\EventListener\RequestListener::onKernelRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.controller" to listener "FOS\RestBundle\EventListener\ViewResponseListener::onKernelController". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\Security\Http\RememberMe\ResponseListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\SaveSessionListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\StreamedResponseListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelFinishRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelFinishRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelFinishRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.finish_request" to listener "Symfony\Component\Security\Http\Firewall::onKernelFinishRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelException". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ExceptionListener::onKernelException". [] []
[2015-04-21 13:21:57] event.DEBUG: Listener "Symfony\Component\HttpKernel\EventListener\ExceptionListener::onKernelException" stopped propagation of the event "kernel.exception". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\Security\Http\RememberMe\ResponseListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\SaveSessionListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\StreamedResponseListener::onKernelResponse". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelFinishRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelFinishRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelFinishRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.finish_request" to listener "Symfony\Component\Security\Http\Firewall::onKernelFinishRequest". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.terminate" to listener "Symfony\Bundle\SwiftmailerBundle\EventListener\EmailSenderListener::onTerminate". [] []
[2015-04-21 13:21:57] event.DEBUG: Notified event "kernel.terminate" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelTerminate". [] []
@dosten
Copy link
Contributor

dosten commented Apr 22, 2015

This works in an older version? Can you paste the complete stack trace?

@aledeg
Copy link
Author

aledeg commented Apr 22, 2015

I don't know if this works in an older version. But I think it didn't work.
I check the code that fails in older version of the NumberFormatter class (up to 2.3) and the regex matching a number is the same.

@dosten
Copy link
Contributor

dosten commented Apr 22, 2015

I found that the problem is the intl.error_level option. Can you comment the intl.error_level line in your php.ini or set the value to 0?

@aledeg
Copy link
Author

aledeg commented Apr 22, 2015

If I change the error_level to 0, I don't have errors anymore.

What I don't understand is why there is two level of validation. If I enter text in an integer field, the validation of type is done by the field. But if I chose to use a text field, the validation of type is done with the validator.

@dosten
Copy link
Contributor

dosten commented Apr 22, 2015

The integer type is rendered as a input[type=number], which have a HTML5 validation by default. see http://symfony.com/doc/current/book/forms.html#form-validation for instructions for disable it.

@aledeg
Copy link
Author

aledeg commented Apr 23, 2015

Thank you. I knew that but I didn't mentioned it since I am not using HTML5.
I build an API which consume JSON or XML data. That's why I don't understand why there is 2 levels of validation.

@dosten
Copy link
Contributor

dosten commented Apr 23, 2015

You're welcome :) If you need help, you can make a question in the mailing list http://symfony.com/mailing_lists. Is this resolved? Can this be closed?

@aledeg
Copy link
Author

aledeg commented Apr 23, 2015

I will close it but I am still confused.

@aledeg aledeg closed this as completed Apr 23, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants