NumberFormatter::parse

numfmt_parse

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)

NumberFormatter::parse -- numfmt_parse β€” Π Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ число

ОписаниС

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ

public function NumberFormatter::parse(string $string, int $type = NumberFormatter::TYPE_DOUBLE, int &$offset = null): int|float|false

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ

function numfmt_parse(
Β Β Β Β NumberFormatter $formatter,
Β Β Β Β string $string,
Β Β Β Β int $type = NumberFormatter::TYPE_DOUBLE,
Β Β Β Β int &$offset = null
): int|float|false

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ строку Π² число ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ срСдства форматирования.

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

formatter

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ NumberFormatter.

string

Π‘Ρ‚Ρ€ΠΎΠΊΠ° для Ρ€Π°Π·Π±ΠΎΡ€Π° числа.

type

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ форматирования. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ NumberFormatter::TYPE_DOUBLE. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ константа NumberFormatter::TYPE_CURRENCY Π½Π΅ поддСрТиваСтся; Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ вмСсто Π½Π΅Ρ‘ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ NumberFormatter::parseCurrency().

offset

Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² строкС, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ начинаСтся синтаксичСский Π°Π½Π°Π»ΠΈΠ·. ΠŸΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ смСщСниС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ закончился синтаксичСский Π°Π½Π°Π»ΠΈΠ·.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ числа ΠΈΠ»ΠΈ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false Π² случаС возникновСния ошибки.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования numfmt_parse()

<?php
$fmt
= numfmt_create( 'de_DE', NumberFormatter::DECIMAL );
$num = "1.234.567,891";
echo
numfmt_parse($fmt, $num)."\n";
echo
numfmt_parse($fmt, $num, NumberFormatter::TYPE_INT32)."\n";
?>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ стилС

<?php
$fmt
= new NumberFormatter( 'de_DE', NumberFormatter::DECIMAL );
$num = "1.234.567,891";
echo
$fmt->parse($num)."\n";
echo
$fmt->parse($num, NumberFormatter::TYPE_INT32)."\n";
?>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

1234567.891
1234567

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • numfmt_get_error_code() - ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ послСдний ΠΊΠΎΠ΄ ошибки срСдства форматирования
  • numfmt_format() - Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ число
  • numfmt_parse_currency() - Π Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ Π²Π°Π»ΡŽΡ‚Ρ‹
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 2 notes

up
5
rdohms at php dot net ΒΆ
13 years ago
It interesting to note that the expected behavior for this function may change according to your ICU version.

In ICU 4.4.2 (standard for Ubuntu 10.* with PHP 5.3.5)

    With locale 'en', input of 100,1 returns 1001

In ICU 4.8.1 (standard for Ubuntu 12.* with PHP 5.3.10)

    With locale 'en', input of 100,1 returns "false"

Be sure to note your ICU version in phpinfo() to be sure you will get the expected output.
up
4
Rakasch ΒΆ
7 years ago
'en_EN':

basically the first part is the language and the second part the region:
'en_EN' - english, England
'en_US' - english, United States

You can lookup the language tags like 'en_EN' here:
https://datahub.io/core/language-codes
see "ietf-language-tags"