NAME String::Numeric - Determine whether a string represents a numeric value SYNOPSIS $boolean = is_float($string); $boolean = is_decimal($string); $boolean = is_int($string); $boolean = is_int8($string); $boolean = is_int16($string); $boolean = is_int32($string); $boolean = is_int64($string); $boolean = is_int128($string); $boolean = is_uint($string); $boolean = is_uint8($string); $boolean = is_uint16($string); $boolean = is_uint32($string); $boolean = is_uint64($string); $boolean = is_uint128($string); DESCRIPTION A numeric value contains an integer part that may be prefixed with an optional minus sign, which may be followed by a fractional part and/or an exponent part. See "String::Numeric ABNF" for specification and "COMPARISON" for a comparison with "Scalar::Util::looks_like_number()". FUNCTIONS is_float Determine whether $string is a floating-point number of arbitrary precision. *Usage* $boolean = is_float($string); $boolean = is_float('-1'); # true $boolean = is_float('1'); # true $boolean = is_float('1.0'); # true $boolean = is_float('1.0e6'); # true $boolean = is_float('1e6'); # true $boolean = is_float(undef); # false *Arguments* $string *Returns* $boolean *Note* This function is also available as "is_numeric()" is_decimal Determine whether $string is a decimal number of arbitrary precision. *Usage* $boolean = is_decimal($string); $boolean = is_decimal('-1'); # true $boolean = is_decimal('1'); # true $boolean = is_decimal('1.0'); # true $boolean = is_decimal('1.0e6'); # false $boolean = is_decimal('1e6'); # false $boolean = is_decimal(undef); # false *Arguments* $string *Returns* $boolean is_int Determine whether $string is an integer of arbitrary precision. *Usage* $boolean = is_int($string); $boolean = is_int('1'); # true $boolean = is_int('-1'); # true $boolean = is_int('1.0'); # false $boolean = is_int(undef); # false *Arguments* $string *Returns* $boolean *Note* This function is also available as "is_integer()" is_int8 Determine whether $string is a 8-bit signed integer which can have any value in the range -128 to 127. *Usage* $boolean = is_int8($string); $boolean = is_int8('-128'); # true $boolean = is_int8('127'); # true $boolean = is_int8(undef); # false *Arguments* $string *Returns* $boolean is_int16 Determine whether $string is a 16-bit signed integer which can have any value in the range -32,768 to 32,767. *Usage* $boolean = is_int16($string); $boolean = is_int16('-32768'); # true $boolean = is_int16('32767'); # true $boolean = is_int16(undef); # false *Arguments* $string *Returns* $boolean is_int32 Determine whether $string is a 32-bit signed integer which can have any value in the range -2,147,483,648 to 2,147,483,647. *Usage* $boolean = is_int32($string); $boolean = is_int32('-2147483648'); # true $boolean = is_int32('2147483647'); # true $boolean = is_int32(undef); # false *Arguments* $string *Returns* $boolean is_int64 Determine whether $string is a 64-bit signed integer which can have any value in the range -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807. *Usage* $boolean = is_int64($string); $boolean = is_int64('-9223372036854775808'); # true $boolean = is_int64('9223372036854775807'); # true $boolean = is_int64(undef); # false *Arguments* $string *Returns* $boolean is_int128 Determine whether $string is a 128-bit signed integer which can have any value in the range -170,141,183,460,469,231,731,687,303,715,884,105,728 to 170,141,183,460,469,231,731,687,303,715,884,105,727. *Usage* $boolean = is_int128($string); $boolean = is_int128('-170141183460469231731687303715884105728'); # true $boolean = is_int128('170141183460469231731687303715884105727'); # true $boolean = is_int128(undef); # false *Arguments* $string *Returns* $boolean is_uint Determine whether $string is an unsigned integer of arbitrary precision. *Usage* $boolean = is_uint($string); $boolean = is_uint('1'); # true $boolean = is_uint('-1'); # false $boolean = is_uint('1.0'); # false $boolean = is_uint(undef); # false *Arguments* $string *Returns* $boolean is_uint8 Determine whether $string is a 8-bit unsigned integer which can have any value in the range 0 to 255. *Usage* $boolean = is_uint8($string); $boolean = is_uint8('0'); # true $boolean = is_uint8('255'); # true $boolean = is_uint8(undef); # false *Arguments* $string *Returns* $boolean is_uint16 Determine whether $string is a 16-bit unsigned integer which can have any value in the range 0 to 65,535. *Usage* $boolean = is_uint16($string); $boolean = is_uint16('0'); # true $boolean = is_uint16('65535'); # true $boolean = is_uint16(undef); # false *Arguments* $string *Returns* $boolean is_uint32 Determine whether $string is a 32-bit unsigned integer which can have any value in the range 0 to 4,294,967,295. *Usage* $boolean = is_uint32($string); $boolean = is_uint32('0'); # true $boolean = is_uint32('4294967295'); # true $boolean = is_uint32(undef); # false *Arguments* $string *Returns* $boolean is_uint64 Determine whether $string is a 64-bit unsigned integer which can have any value in the range 0 to 18,446,744,073,709,551,615. *Usage* $boolean = is_uint64($string); $boolean = is_uint64('0'); # true $boolean = is_uint64('18446744073709551615'); # true $boolean = is_uint64(undef); # false *Arguments* $string *Returns* $boolean is_uint128 Determine whether $string is a 128-bit unsigned integer which can have any value in the range 0 to 340,282,366,920,938,463,463,374,607,431,768,211,455. *Usage* $boolean = is_uint128($string); $boolean = is_uint128('0'); # true $boolean = is_uint128('340282366920938463463374607431768211455'); # true $boolean = is_uint128(undef); # false *Arguments* $string *Returns* $boolean LIMITATIONS "String::Numeric" supports numbers in decimal notation using Western Arabic numerals and decimal fractions seperated with a dot. Other notations or numeral systems are not supported. COMPARISON Scalar::Util None of the following is considered valid by "String::Numeric". * Fractional number without integer part or fractional part looks_like_number("1.") # true looks_like_number(".1") # true * Plus prefix looks_like_number("+1") # true * Leading zeros looks_like_number("01") # true * Radix point other than "." looks_like_number("1,1") # true assuming locale is in effect and locale radix point is ',' * Leading and/or trailing whitespace, such as HT, LF, FF, CR, and SP looks_like_number("\n1") # true looks_like_number("1\n") # true looks_like_number("\n1\n") # true * Numeric values that are not represented as a sequence of digits, such as "Inf", "Infinity", "NaN" and "0 but true" looks_like_number("Inf") # true looks_like_number("Infinity") # true looks_like_number("NaN") # true looks_like_number("0 but true") # true GRAMMAR String::Numeric ABNF ; String::Numeric ABNF Grammar is-float = [ "-" ] FloatNumber is-decimal = [ "-" ] DecimalNumber is-integer = [ "-" ] DecimalInteger is-uint = DecimalInteger FloatNumber = DecimalNumber [ ExponentPart ] DecimalNumber = DecimalInteger [ FractionalPart ] DecimalInteger = "0" / ( NonZeroDigit *DecimalDigit ) DecimalDigit = %x30-39; 0-9 NonZeroDigit = %x31-39; 1-9 FractionalPart = "." 1*DecimalDigit ExponentIndicator = "e" / "E" ExponentPart = ExponentIndicator [ "+" / "-" ] 1*DecimalDigit looks_like_number ABNF ; ABNF Grammar based on 5.10 Perl_grok_number() looks-like-number = Number / ZeroButTrue Number = *WS [ Sign ] ( FloatNumber / ( Infinity / NaN ) ) *WS; FloatNumber = DecimalNumber [ ExponentPart ] DecimalNumber = DecimalInteger [ "." *DecimalDigit ] / "." 1*DecimalDigit DecimalInteger = 1*DecimalDigit WS = %x09 ; HT / %x0A ; LF / %x0C ; FF / %x0D ; CR / %x20 ; SP DecimalDigit = %x30-39; 0-9 Sign = "+" / "-" ExponentIndicator = "e" / "E" ExponentPart = ExponentIndicator [ Sign ] 1*DecimalDigit Infinity = "Inf" / "Infinity" NaN = "NaN" ZeroButTrue = %x30.20.62.75.74.20.74.72.75.65 ; 0 but true EXPORTS None by default. Functions and constants can either be imported individually or in sets grouped by tag names. The tag names are: ":all" exports all functions. ":is_int" exports all "is_int" functions. ":is_uint" exports all "is_uint" functions. DIAGNOSTICS (F) Usage: %s(string) Subroutine %s invoked with wrong number of arguments. ENVIRONMENT Set the environment variable "STRING_NUMERIC_PP" to a true value before loading this package to disable usage of XS implementation. PREREQUISITES Run-Time perl 5.006 or greater. Carp, core module. Exporter, core module. Build-Time In addition to Run-Time: Test::More 0.47 or greater, core module since 5.6.2. Test::Exception. SEE ALSO String::Numeric::XS Data::Types Regexp::Common::number Scalar::Util Scalar::Util::Numeric AUTHOR Christian Hansen "chansen@cpan.org" COPYRIGHT AND LICENSE Copyright 2009 Christian Hansen. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.