题目出自ScriptOJ
判断美元符号格式
完成一个函数 isUSDFormat 返回 true/false 来判断一个字符串是否符合美元格式:
1. 以 $ 开头
2. 如果是小数,保留两位小数;如果不是小数则不显示小数部分
3. 整数部分从小数点上一位开始每隔三位用 , 分割开来
4. 如果整数部分从数字 0 开始,则只会显示一位 0
例如:
isUSDFormat('$1') // => true
isUSDFormat('$1.0') // => false
isUSDFormat('$100,000.00') // => true
isUSDFormat('$0,000.00') // => false
isUSDFormat('$0.00') // => true
isUSDFormat('$11,23,345.33') // => false
isUSDFormat('$1,123,345.33') // => true
我居然写出了……
const isUSDFormat = (str) => {
var regexp = /^\$((\d|\,)+)(\.?)(\d*)$/,
str_ints,
i,
len;
var res = str.match( regexp );
console.log( res );
if( res ){
// long int
if( res[1].indexOf(",") >= 0 ){
str_ints = res[1].split(",");
if( parseInt( str_ints.join("") ) == 0 ){
return false;
}
for( i in str_ints ){
if( i == 0 && str_ints[i].length > 3){
return false;
}else if( i != 0 && str_ints[i].length != 3 ){
return false;
}
}
// int
}else{
if( String( parseInt( res[1] ) ) != res[1] ){
return false;
}else if( res[1].length > 3 ){
return false;
}
}
// decimal
if( res[3] == "." && res[4].length != 2 ){
return false;
}
return true;
}else{
return false;
}
}
以后要每天写一遍
var regexp = /^\$([1-9]\d{0,2}(,\d{3})*|0)(\.\d{2})?$/;