【JavaScript】編程題 2019.08.13

編程題:JS-計數、流程語句、函數等


1.正則

1.1 判斷是否包含數字

  • 方法1:
function containsNumber(str) {
    for (var i=0;i<10;i++) {
        if(str.indexOf(i)!=-1){
            return true;
        }
    }
    return false;
}
  • 方法2:轉載。正則
function containsNumber(str) {
    return /\d/.test(str);
}

1.2 檢查重複字符串

  • 給定字符串 str,檢查其是否包含連續重複的字母(a-zA-Z),包含返回 true,否則返回 false
function containsRepeatingLetter(str) {
    return /([a-zA-Z])\1/.test(str);
}

1.3 判斷是否以元音字母結尾

  • 方法1:
function endsWithVowel(str) {
    var len = str.length;
    switch (str[len - 1]) {
        case 'a':
        case 'o':
        case 'i':
        case 'e':
        case 'u':
        case 'A':
        case 'O':
        case 'I':
        case 'E':
        case 'U': return true;
        default: return false;
    }
}
  • 方法2:轉載。正則,集合:[a,e,i,o,u];以。。。結尾:$;不區分大小寫:i
function endsWithVowel(str) {
  return /[a,e,i,o,u]$/i.test(str);
}

1.4 獲取指定字符串

  • 給定字符串 str,檢查其是否包含 連續3個數字
    1、如果包含,返回最新出現的 3 個數字的字符串
    2、如果不包含,返回 false
  • 方法1:親測可以,牛客網不行!
function captureThreeNumbers(str) {
	var nstr=[];
    for(var i=0;i<str.length-2;i++){
        if(typeof(+str[i])=='number'&& !isNaN(+str[i])){
            if(typeof(+str[i+1])=='number'&& !isNaN(+str[i+1])&&typeof(+str[i+2])=='number'&& !isNaN(+str[i+2])){
                nstr.push(+str[i],+str[i+1],+str[i+2]);
                return nstr;
            }
        }
    }
    return false;
}
  • 方法2:改進,親測可以,牛客網不行!
function captureThreeNumbers(str) {
	var nstr=[];
    for(var i=0;i<str.length-2;i++){
        if( isNumber(+str[i])){
            if(isNumber(+str[i+1])&&isNumber(+str[i+2])){
                nstr.push(+str[i],+str[i+1],+str[i+2]);
                return nstr;
            }
        }
    }
    return false;
}
function isNumber(obj) {  
    return typeof obj === 'number' && !isNaN(obj)  
}  
  • 方法3:轉載。正則,match()返回的是正則表達式匹配的字符串數組,連續的三個任意數字用正則表達式表示爲/\d{3}/。
function captureThreeNumbers(str) {
  var arr = str.match(/\d{3}/);
  if(arr)return arr[0];
  return false;
 }

1.5 判斷是否符合指定格式

  • 給定字符串 str,檢查其是否符合如下格式
    1、XXX-XXX-XXXX
    2、其中 X 爲 Number 類型
  • 方法1: 親測可以,牛客網不行
function matchesPattern(str) {
    var s=0;
    if (str[3] == str[7] && str[3] == '-') {
        for (i = 0; i < str.length; i++) {
            if (i != 3 && i != 7 && isNumber(+str[i])) {
                s++;

            }
        }
    }
    if (s==str.length-2)return true;
    return false;
};
function isNumber(obj) {  
    return typeof obj === 'number' && !isNaN(obj);  
}  
  • 方法2:正則,轉載。
本題需要注意格式,開頭^和結尾$必須加上來限定字符串,3個數可表示爲\d{3},4個數則爲\d{4},
{n}表示前面內容出現的次數。正則表達式可寫作/^\d{3}-\d{3}-\d{4}$/,有相同部分\d{3}-,
因此也可寫作/^(\d{3}-){2}\d{4}$/
function matchesPattern(str) {
    return/^(\d{3}-){2}\d{4}$/.test(str);
}

1.6 判斷是否符合 USD 格式

  • 給定字符串 str,檢查其是否符合美元書寫格式
    1、以 $ 開始
    2、整數部分,從個位起,滿 3 個數字用 , 分隔
    3、如果爲小數,則小數部分長度爲 2
    4、正確的格式如:$1,023,032.03 或者 $2.03,錯誤的格式如:$3,432,12.12 或者 $34,344.3
    在這裏插入圖片描述
function isUSD(str) {
   return /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/.test(str);
}

2. 小結

1.正則化有利於簡化代碼,判斷字符串!
2.注意“存在”與“任何”的區別,前者滿足條件即可return,如1.4;後者需要遍歷所有字符,如1.5.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章