替换链接地址中不合法的双斜杠 ‘//’
'http://www.baidau.com//sasd///da'.replace(/([^(http|https):\/\/])(\/\/*)/g,'$1/');
// "http://www.baidau.com/sasd/da" 合格
然而:
'http://www.baidau.com/htt///da'.replace(/([^(http|https):\/\/])(\/\/*)/g,'$1/');
//"http://www.baidau.com/htt///da" 失败
// 正确的姿势
'http://www.baidau.com/htt///da'.replace(/([^:\/\/])(\/\/*)/g,'$1/');
然而:
'http:www.baidau.com/htt///da'.replace(/([^:\/\/])(\/\/*)/g,'$1/');
//"http:www.baidau.com/htt/da" 失败
// 最终正确的姿势
'http:www.baidau.com/htt///da'.replace(/((http|https)(:\/+))|(\w\/+)/g,function(val){
var reg = /\/+/g;
var strRe = /(http|https):\/\//.test(val) ? '//' : '/';
return val.replace(reg,strRe);
});
// "http://www.baidau.com/htt/da" 完美!!!
最后:大佬说太复杂,思考后的第3个月
我偶然得到了大佬的正则使用文档,然后灵感爆棚
=> 特别详细的正则使用手册
最完美的解决方法
'http://www.baidau.com//sasd///da'.replace(/(?<=\:\/.*)(\/\/*)/g, '/');
// "http://www.baidau.com/htt/da"
正则验证是否全部是空白字符
/^\s*$/.test(" ") // true
/^\s*$/.test(" asasa ") // false
字符下划线转驼峰
toHump(string){
return string.replace(/\_(\w)/g,function(all,letter){
return letter.toUpperCase()
})
}
toHump('a_b_c') //aBC
驼峰转换下划线
function toLine(string) {
return string.replace(/([A-Z])/g,"_$1").toLowerCase();
}
toLine('nB') // n_b
验证金额保留两位小数
1、只能正数金额:
//(^[1-9](\d+)?(\.\d{1,2})?$)|(^0$)|(^\d\.\d{1,2}$)
(^[1-9](\d+)?(\.\d{1,2})?$) -->
"^[1-9]"开头是1-9之间的数字,
"(\d+)"至少一个数字,
"?"匹配0个或一个以上的结果
"\." 小数点
"\d"匹配数字
"{1,2}" 最少一个,最多两个
"?"匹配0个或一个以上的结果
"$"结尾
/(^[1-9](\d+)?(\.\d{1,2})?$)|(^0$)|(^\d\.\d{1,2}$)/.test('1.00') //true
/(^[1-9](\d+)?(\.\d{1,2})?$)|(^0$)|(^\d\.\d{1,2}$)/.test('1.000') //false
/(^[1-9](\d+)?(\.\d{1,2})?$)|(^0$)|(^\d\.\d{1,2}$)/.test('1a.00') //false
/(^[1-9](\d+)?(\.\d{1,2})?$)|(^0$)|(^\d\.\d{1,2}$)/.test('1.0.0') //false
/(^[1-9](\d+)?(\.\d{1,2})?$)|(^0$)|(^\d\.\d{1,2}$)/.test('-1.00') //false
2、允许负数金额:
//(^-?[1-9](\d+)?(\.\d{1,2})?$)|(^-?0$)|(^-?\d\.\d{1,2}$)
(^[1-9](\d+)?(\.\d{1,2})?$) -->
"^-?[1-9]"开头是1-9之间的数字 0个或者一个负号,
"(\d+)"至少一个数字,
"?"匹配0个或一个以上的结果
"\." 小数点
"\d"匹配数字
"{1,2}" 最少一个,最多两个
"?"匹配0个或一个以上的结果
"$"结尾
/(^-?[1-9](\d+)?(\.\d{1,2})?$)|(^-?0$)|(^-?\d\.\d{1,2}$)/.test('1.00') //true
/(^-?[1-9](\d+)?(\.\d{1,2})?$)|(^-?0$)|(^-?\d\.\d{1,2}$)/.test('-1.00') //true
/(^-?[1-9](\d+)?(\.\d{1,2})?$)|(^-?0$)|(^-?\d\.\d{1,2}$)/.test('1.000') //false
/(^-?[1-9](\d+)?(\.\d{1,2})?$)|(^-?0$)|(^-?\d\.\d{1,2}$)/.test('1a.00') //false
/(^-?[1-9](\d+)?(\.\d{1,2})?$)|(^-?0$)|(^-?\d\.\d{1,2}$)/.test('1.0.0') //false
最完美的邮箱验证
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@
((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
国际手机号验证
CN("中国","^(\\+?0?86\\-?)?1[345789]\\d{9}$"),
TW("台湾","^(\\+?886\\-?|0)?9\\d{8}$"),
HK("香港","^(\\+?852\\-?)?[569]\\d{3}\\-?\\d{4}$"),
MS("马来西亚","^(\\+?6?01){1}(([145]{1}(\\-|\\s)?\\d{7,8})|([236789]{1}(\\s|\\-)?\\d{7}))$"),
PH("菲律宾","^(\\+?0?63\\-?)?\\d{10}$"),
TH("泰国","^(\\+?0?66\\-?)?\\d{10}$"),
SG("新加坡","^(\\+?0?65\\-?)?\\d{10}$"),
/* 以上是项目可能设计到的市场,一下是其他国家的手机号校验正则,欢迎补充*/
DZ("阿尔及利亚", "^(\\+?213|0)(5|6|7)\\d{8}$"),
SY("叙利亚","^(!?(\\+?963)|0)?9\\d{8}$"),
SA("沙特阿拉伯","^(!?(\\+?966)|0)?5\\d{8}$"),
US("美国","^(\\+?1)?[2-9]\\d{2}[2-9](?!11)\\d{6}$"),
CZ("捷克共和国","^(\\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$"),
DE("德国","^(\\+?49[ \\.\\-])?([\\(]{1}[0-9]{1,6}[\\)])?([0-9 \\.\\-\\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$"),
DK("丹麦","^(\\+?45)?(\\d{8})$"),
GR("希腊","^(\\+?30)?(69\\d{8})$"),
AU("澳大利亚","^(\\+?61|0)4\\d{8}$"),
GB("英国","^(\\+?44|0)7\\d{9}$"),
CA("加拿大","^(\\+?1)?[2-9]\\d{2}[2-9](?!11)\\d{6}$"),
IN("印度","^(\\+?91|0)?[789]\\d{9}$"),
NZ("新西兰","^(\\+?64|0)2\\d{7,9}$"),
ZA("南非","^(\\+?27|0)\\d{9}$"),
ZM("赞比亚","^(\\+?26)?09[567]\\d{7}$"),
ES("西班牙","^(\\+?34)?(6\\d{1}|7[1234])\\d{7}$"),
FI("芬兰","^(\\+?358|0)\\s?(4(0|1|2|4|5)?|50)\\s?(\\d\\s?){4,8}\\d$"),
FR("法国","^(\\+?33|0)[67]\\d{8}$"),
IL("以色列","^(\\+972|0)([23489]|5[0248]|77)[1-9]\\d{6}"),
HU("匈牙利","^(\\+?36)(20|30|70)\\d{7}$"),
IT("意大利","^(\\+?39)?\\s?3\\d{2} ?\\d{6,7}$"),
JP("日本","^(\\+?81|0)\\d{1,4}[ \\-]?\\d{1,4}[ \\-]?\\d{4}$"),
NO("挪威","^(\\+?47)?[49]\\d{7}$"),
BE("比利时","^(\\+?32|0)4?\\d{8}$"),
PL("波兰","^(\\+?48)? ?[5-8]\\d ?\\d{3} ?\\d{2} ?\\d{2}$"),
BR("巴西","^(\\+?55|0)\\-?[1-9]{2}\\-?[2-9]{1}\\d{3,4}\\-?\\d{4}$"),
PT("葡萄牙","^(\\+?351)?9[1236]\\d{7}$"),
RU("俄罗斯","^(\\+?7|8)?9\\d{9}$"),
RS("塞尔维亚","^(\\+3816|06)[- \\d]{5,9}$"),
R("土耳其","^(\\+?90|0)?5\\d{9}$"),
VN("越南","^(\\+?84|0)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})$");
不使用正则字符串去重
[].filter.call("abcdabecd", (s, i, o) => o.indexOf(s) == i).join("");
首字母转大写
var name = "JAMES";
// 将所有字符变成小写
name = name.toLowerCase();
// 提取首字母转换为大写并与其余的字母拼接起来(3种方法)
var name = name.charAt(0).toUpperCase() + name.slice(1);
var name = name.slice(0,1).toUpperCase() + name.slice(1);
var name = name.subString(0,1).toUpperCase() + name.subString(1);
上面代码参考
也可以使用 toLocalUpperCase(): toLocalUpperCase 参考链接