剑指offer(53)表示数值的字符串

题目描述

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

题目分析

一般当我们看到判断字符串,就可以联想到正则表达式,这里用正则表达式确实可以好做很多。当然也有不用正则表达式的做法,不过就比较复杂了,有很多分支,类似状态机。

但是我觉得那个真的比较麻烦,没必要深究。

正则表达式也有很多种写法,仁者见仁,智者见智。在这里就给出两种正则表达式的解法。

代码

第一种:

// 第一种
function isNumeric(s) {
  return s.match(/[+-]?d*(.d*)?([eE][+-]?d+)?/g)[0] === s;
}

第二种:

function isNumeric2(s) {
  return s.search(/^[+-]?d*(.d*)?$/) === 0 || s.search(/^[+-]?d+(.d*)?[Ee]{1}[+-]?d+$/) === 0;
}
原文地址:https://www.cnblogs.com/wuguanglin/p/isNumeric.html