'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?



Solution 1:[1]

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;
  }

Solution 2:[2]

Even shorter. Despite the fact it will works with double as well, using num is more accurately.

isNumeric(string) => num.tryParse(string) != null;

num.tryParse inside:

static num tryParse(String input) {
  String source = input.trim();
  return int.tryParse(source) ?? double.tryParse(source);
}

Solution 3:[3]

for anyone wanting a non native way using regex

RegExp _numeric = RegExp(r'^-?[0-9]+$');

/// check if the string contains only numbers
 bool isNumeric(String str) {
return _numeric.hasMatch(str);
}

Solution 4:[4]

if (int.tryParse(value) == null) {
  return 'Only Number are allowed';
}

Solution 5:[5]


Yes, there is a more "sophisticated" way *rsrs*.
extension Numeric on String {
  bool get isNumeric => num.tryParse(this) != null ? true : false;
}

main() {
  print("1".isNumeric); // true
  print("-1".isNumeric); // true
  print("2.5".isNumeric); // true
  print("-2.5".isNumeric); // true
  print("0x14f".isNumeric); // true
  print("2,5".isNumeric); // false
  print("2a".isNumeric); // false
}

Solution 6:[6]

import 'dart:convert';

void main() {
  //------------------------allMatches Example---------------------------------
  print('Example 1');

  //We want to extract ages from the following string:
  String str1 = 'Sara is 26 years old. Maria is 18 while Masood is 8.';

  //Declaring a RegExp object with a pattern that matches sequences of digits
  RegExp reg1 = new RegExp(r'(\d+)');

  //Iterating over the matches returned from allMatches
  Iterable allMatches = reg1.allMatches(str1);
  var matchCount = 0;
  allMatches.forEach((match) {
    matchCount += 1;
    print('Match ${matchCount}: ' + str1.substring(match.start, match.end));
  });

  //------------------------firstMatch Example---------------------------------
  print('\nExample 2');

  //We want to find the first sequence of word characters in the following string:
  //Note: A word character is any single letter, number or underscore
  String str2 = '#%^!_as22 d3*fg%';

  //Declaring a RegExp object with a pattern that matches sequences of word
  //characters
  RegExp reg2 = new RegExp(r'(\w+)');

  //Using the firstMatch function to display the first match found
  Match firstMatch = reg2.firstMatch(str2) as Match;
  print('First match: ${str2.substring(firstMatch.start, firstMatch.end)}');

  //--------------------------hasMatch Example---------------------------------
  print('\nExample 3');

  //We want to check whether a following strings have white space or not
  String str3 = 'Achoo!';
  String str4 = 'Bless you.';

  //Declaring a RegExp object with a pattern that matches whitespaces
  RegExp reg3 = new RegExp(r'(\s)');

  //Using the hasMatch method to check strings for whitespaces
  print(
      'The string "' + str3 + '" contains whitespaces: ${reg3.hasMatch(str3)}');
  print(
      'The string "' + str4 + '" contains whitespaces: ${reg3.hasMatch(str4)}');

  //--------------------------stringMatch Example-------------------------------
  print('\nExample 4');

  //We want to print the first non-digit sequence in the following strings;
  String str5 = '121413dog299toy01food';
  String str6 = '00Tom1231frog';

  //Declaring a RegExp object with a pattern that matches sequence of non-digit
  //characters
  RegExp reg4 = new RegExp(r'(\D+)');

  //Using the stringMatch method to find the first non-digit match:
  String? str5Match = reg4.stringMatch(str5);
  String? str6Match = reg4.stringMatch(str6);
  print('First match for "' + str5 + '": $str5Match');
  print('First match for "' + str6 + '": $str6Match');

  //--------------------------matchAsPrefix Example-----------------------------
  print('\nExample 5');

  //We want to check if the following strings start with the word "Hello" or not:
  String str7 = 'Greetings, fellow human!';
  String str8 = 'Hello! How are you today?';

  //Declaring a RegExp object with a pattern that matches the word "Hello"
  RegExp reg5 = new RegExp(r'Hello');

  //Using the matchAsPrefix method to match "Hello" to the start of the strings
  Match? str7Match = reg5.matchAsPrefix(str7);
  Match? str8Match = reg5.matchAsPrefix(str8);
  print('"' + str7 + '" starts with hello: ${str7Match != null}');
  print('"' + str8 + '" starts with hello: ${str8Match != null}');
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Matso Abgaryan
Solution 2
Solution 3 Nelson Bwogora
Solution 4 Ashutosh Pareek
Solution 5
Solution 6 nivedha