編程題: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.