【题目】
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如字符串 “+100” “5e2” “-123” “3.1416” “-1E-16”都表示数值
但是 “12e” “1a3.14” “1.2.3” “+-5” “12e+4.3”都不是
【思路】
1.只能出现数字、符号位、小数点、指数位
2.小数点,指数符号位只能出现一次,且不能出现在开头结尾
3.指数位出现后,小数点不允许再出现
4.符号位只能出现在开头和指数位后面
【解法】
function isNumber(value) {if (value == undefined) {return false;}let hasPoint = false; //小数点只能出现一次,出现第一次赋值为truelet hasExp = false; //指数位只能出现一次,第一次出现后赋值为truefor (let i = 0; i < value.length; i++) {const target = value[i];if (target >= 0 && target <= 9) { //所有的数字都可以通过continue;} else if (target === 'e' || target === 'E') {if (hasExp || i === 0 || i === value.length - 1) { //有过e或者第一个就是e或者最后一个是e,不是数值return false;} else {hasExp = true;continue;}} else if (target === '.') {if (hasPoint || hasExp || i === 0 || i === value.length - 1) { //有过小数点或者e或者小数点在第一个或者最后一个都不是数值return false;} else {hasPoint = true;continue;}} else if (target === '-' || target === '+') {if (i === 0 || value[i - 1] === 'e' || value[i - 1] === 'E') { //符合位在第一个,或者前一个是指数econtinue;} else {return false;}} else {return false;}}return true;}
