Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Checking if string is numeric in dart

I need to find out if a string is numeric in dart. It needs to return true on any valid number type in dart. So far, my solution is

bool isNumeric(String str) {   try{     var value = double.parse(str);   } on FormatException {     return false;   } finally {     return true;   } } 

Is there a native way to do this? If not, is there a better way to do it?

like image 591
scrblnrd3 Avatar asked Jun 06 '14 15:06

scrblnrd3


People also ask

How do I check my Dart data type?

Dart objects have runtimeType property which returns Type . To check whether the object has a certain type, use == operator. Unlike is , it will only return true if compared to an exectly same type, which means comparing it with its super class will return false .


2 Answers

This can be simpliefied a bit

void main(args) {   print(isNumeric(null));   print(isNumeric(''));   print(isNumeric('x'));   print(isNumeric('123x'));   print(isNumeric('123'));   print(isNumeric('+123'));   print(isNumeric('123.456'));   print(isNumeric('1,234.567'));   print(isNumeric('1.234,567'));   print(isNumeric('-123'));   print(isNumeric('INFINITY'));   print(isNumeric(double.INFINITY.toString())); // 'Infinity'   print(isNumeric(double.NAN.toString()));   print(isNumeric('0x123')); }  bool isNumeric(String s) {   if(s == null) {     return false;   }   return double.parse(s, (e) => null) != null; } 
false   // null   false   // ''   false   // 'x'   false   // '123x'   true    // '123'   true    // '+123' true    // '123.456'   false   // '1,234.567'   false   // '1.234,567' (would be a valid number in Austria/Germany/...) true    // '-123'   false   // 'INFINITY'   true    // double.INFINITY.toString() true    // double.NAN.toString() false   // '0x123' 

from double.parse DartDoc

   * Examples of accepted strings:    *    *     "3.14"    *     "  3.14 \xA0"    *     "0."    *     ".0"    *     "-1.e3"    *     "1234E+7"    *     "+.12e-9"    *     "-NaN" 

This version accepts also hexadecimal numbers

bool isNumeric(String s) {   if(s == null) {     return false;   }    // TODO according to DartDoc num.parse() includes both (double.parse and int.parse)   return double.parse(s, (e) => null) != null ||        int.parse(s, onError: (e) => null) != null; }  print(int.parse('0xab')); 

true

UPDATE

Since {onError(String source)} is deprecated now you can just use tryParse:

bool isNumeric(String s) {  if (s == null) {    return false;  }  return double.tryParse(s) != null; } 
like image 69
Günter Zöchbauer Avatar answered Sep 19 '22 18:09

Günter Zöchbauer


In Dart 2 this method is deprecated

int.parse(s, onError: (e) => null)

instead, use

 bool _isNumeric(String str) {     if(str == null) {       return false;     }     return double.tryParse(str) != null;   } 
like image 25
Matso Abgaryan Avatar answered Sep 19 '22 18:09

Matso Abgaryan