题目链接:表示数值的字符串
题目描述:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
数值(按顺序)可以分成以下几个部分:
- 若干空格
- 一个 小数 或者 整数
- (可选)一个 'e' 或 'E' ,后面跟着一个 整数
- 若干空格
小数(按顺序)可以分成以下几个部分:
- (可选)一个符号字符('+' 或 '-')
- 下述格式之一:
- 至少一位数字,后面跟着一个点 '.'
- 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
- 一个点 '.' ,后面跟着至少一位数字
整数(按顺序)可以分成以下几个部分:
- (可选)一个符号字符('+' 或 '-')
- 至少一位数字
部分数值列举如下:
["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]
部分非数值列举如下:
["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]
思路:此题应该使用正则表达式。
代码如下:
var isNumber = function(s) {
// 去掉前后空格
s=s.trim();
// 判断中间是否还有空格
if(s.match(/\s/))
return false;
/**
* 匹配开头:+ 或 -,也可以没有
* .后面要有多个数字,或者
* 多个数字后面可以有.或没有,.后面可以没有数字,也可以有多个
* 然后就是匹配结尾,
* e或E,后面的+或-可以没有,但是一定要有多个数字。
* 但是这个整体也可以没有。即有e一定有数字,无e则什么都没有。
*/
let reg=/^['+' '\-']?((\.\d+)|(\d+\.?\d*))((['e' 'E']['+' '\-']?\d+)?)$/;
let res=s.match(reg);
if(res==null || res[0]!==s)
return false;
return true;
};