使用js实现如下功能1、不允许使用正则或者框架或者第三方提供的判断数字的方法。需要自行实现判断逻辑 2、对于十进制数字,需要支持科学计数法 3、如果一个字符串既是十进制数字,又是十六进制数字,得到的结果应该是两者都是 4、不应存在无效的(违反常规的)字符。例如1是合法的十进制和十六进制数字,001则是非法的
时间: 2023-12-03 15:46:20 浏览: 33
可以使用以下代码实现:
```
function isNumber(str) {
if (str === '') return false; // 空字符串不是数字
if (str[0] === '+' || str[0] === '-') str = str.slice(1); // 去掉开头的正负号
if (str === '.') return false; // 只有小数点不是数字
let hasDot = false; // 是否有小数点
let hasE = false; // 是否有科学计数法
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (char === '.') {
if (hasDot || hasE) return false; // 已经有小数点或科学计数法,不是数字
hasDot = true;
} else if (char === 'e' || char === 'E') {
if (hasE || i === 0 || i === str.length - 1) return false; // 已经有科学计数法、开头或结尾是e/E,不是数字
const nextChar = str[i + 1];
if (nextChar === '+' || nextChar === '-') i++; // 科学计数法的符号要跳过
hasE = true;
hasDot = true; // 科学计数法后面不能再有小数点
} else if (!isHexChar(char)) {
return false; // 不是数字或十六进制字符,不是数字
}
}
return true;
}
function isHexChar(char) {
return char >= '0' && char <= '9' || char >= 'a' && char <= 'f' || char >= 'A' && char <= 'F';
}
```
这里使用了一个 `isHexChar` 函数来判断一个字符是否是十六进制字符。对于科学计数法,要注意判断是否有符号、是否已经有小数点。最后在判断是否是数字或十六进制字符即可。