65. Valid Number(js)

65. Valid Number

Validate if a given string can be interpreted as a decimal number.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3   " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false

题意:给定一个字符串,是否可以转换为数字

代码如下:

/**
 * @param {string} s
 * @return {boolean}
 */
var isNumber = function(s) {
//     法一
    let len=s.length;
    let left=0,right=len-1;
    let eExisted=false;
    let dotExisted=false;
    let digitExisted=false;
    while(s[left]===' ') left++;
    while(s[right]===' ') right--;
    if(left>=right && (parseInt(s[left])<0 || parseInt(s[right])>9 )) return false;
    //判断第一个字符
    if(s[left]==='.') dotExisted=true;
    else if(parseInt(s[left])>=0 && parseInt(s[left])<=9) digitExisted=true;
    else if(s[left]!=='+' && s[left]!=='-') return false;
    //遍历中间每个字符
    for(let i=left+1;i<=right-1;i++){
        if(parseInt(s[i])>=0 && parseInt(s[i])<=9) digitExisted=true;
        else if(s[i]==='e' || s[i]==='E'){
            if(!eExisted && s[i-1]!=='+' && s[i-1]!=='-'&&digitExisted ) eExisted=true;
            else return false;
        }else if(s[i]==='+' || s[i]==='-'){
            if(s[i-1]!=='e' && s[i-1]!=='E') return false;
        }else if(s[i]==='.'){
            if(!dotExisted && !eExisted) dotExisted=true;
            else return false;
        }else return false;
        
    }
    if(parseInt(s[right])>=0 && parseInt(s[right])<=9) return true;
    else if(s[right]==='.' && !dotExisted && !eExisted && digitExisted) return true;
    else return false;
//     法二
    // return s.trim()!=='' && !isNaN(+s)
    
};

 

posted @ 2019-03-11 19:47  mingL  阅读(118)  评论(0编辑  收藏  举报