Intl::Token::Number
A regex token for detecting localized numbers
To use, simply include the token <local-number>
in anything interpreted as regex.
use Intl::Token::Number;
# (assuming English)
if '15,859,333.41' ~~ /<local-number>/ {
say ~$<local-number>; # 15,859,333.41 <-- stringified
say +$<local-number>; # 15859333.41 <-- numerical
}
The <local-number>
token defaults to using the language provided by user-language
.
This makes it quite useful for parsing CLI. Sometimes, though, you'll want / need to specify the language directly.
Just include it after a colon:
# Korean uses commas to separate thousands
'1,234' ~~ /<local-number: 'ko'>/;
say +$<local-number>; # 1234
# Spanish uses commas to separate integers from fractionals
'1,234' ~~ /<local-number: 'es'>/;
say +$<local-number>; # 1.234
Formats including percents, permilles, and exponential notation are supported:
# Assuming English
'90%' ~~ /<local-number>/;
say +$<local-number>; # 0.9
'1.23E3' ~~ /<local-number>/;
say +$<local-number>; # 123
For those interested in details about the match, the match object is introspectable:
base-number
: the number matched, ignoring percent/exponential modifiersexponent
: the exponent used (defaults to 1 for non-exponential numbers)number-type
: any of standard
, percent
, permille
, exponential
To do
- Add support for native/traditional/financial-style numbers
- Add support for lenient parsing (e.g. accept any of
<,٫⹁︐﹐,>
for ,
).- This will be very important for languages like Finnish, which uses a non-breaking space, but is probably entered as a plain space by most people.
- Enforce grouping digits? Present, 1,2,3,4 will parse as 1234.
- Additional formats like approximately, at least, etc.
Version history
- v0.6
- Optimized grammar
- Now uses RakuAST for generation.
- Match role provides more introspection
- Now prefer
User::Language
to Intl::UserLanguage
- v.0.5.0
- First published version as an independent module
- Adapted to work with newest version of
Intl::CLDR
- Housekeeping
- Cleaned up code, added documentation, improved tests
- v.0.4.2
- Renamed to Intl::CLDR::Numbers
- v.0.4.1
- Published as a part of
Intl::CLDR
(as Intl::CLDR::Numbers::NumberFinder
) - Support for basic number parsing using default numeric systems