判断字符串是否表示数值
题目¶
统计信息:字数 1891 阅读4分钟
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。
但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
思路¶
考虑完全所有情况(考点字符串;题目难度不大,需要全面考虑)
- 只能出现数字、符号位、小数点、指数位
- 小数点,指数符号只能出现一次、且不能出现在开头结尾
- 指数位出现后,小数点不允许在出现
- 符号位只能出现在开头和指数位后面
代码¶
function isNumeric(s) {
// 如果是 null 或者 undefined,直接返回 false
if (s == undefined) {
return false;
}
// 记录是否有小数点和指数符号
let hasPoint = false;
let hasExp = false;
// 循环字符串
for (let i = 0; i < s.length; i++) {
const target = s[i];
// 1、数字
if (target >= 0 && target <= 9) {
continue;
}
// 2、指数(只能出现一次,并且不能出现在开头或结尾)
else if (target === 'e' || target === 'E') {
if (hasExp || i === 0 || i === s.length - 1) {
return false;
} else {
hasExp = true;
continue;
}
}
// 3、小数点(只能出现一次,不能出现在开头或结尾)
else if (target === '.') {
if (hasPoint || hasExp || i === 0 || i === s.length - 1) {
return false;
} else {
hasPoint = true;
continue;
}
}
// 4、正负号(只能出现在第一位或者指数的后面)
else if (target === '-' || target === '+') {
if (i === 0 || s[i - 1] === 'e' || s[i - 1] === 'E') {
continue;
} else {
return false;
}
}
// 5、其他符号(不能出现)
else {
return false;
}
}
return true;
}
Last update:
November 9, 2024