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?
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 .
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; } 
                        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;   } 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With