工具篇1

记录下日常开发有用到或封装的函数

Posted by Wason on August 14, 2019

工具篇 1

记录下日常开发有用到或封装的函数

1.邮箱验证正则公式

网上找到的比较简单些的验证,如比较正式验证邮箱的正则

/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
/^[A-Za-zd]+([-_.][A-Za-zd]+)*@([A-Za-zd]+[-.])+[A-Za-zd]{2,5}$/

来自项目使用过的例子:

var ret = /^[A-Za-z0-9]+([-_.][A-Za-z0-9]+)*@([A-Za-z0-9][-A-Za-z0-9]+).gov.hk+$/;
ret.test(str)

===========2019-05-25=======

过了一段时间,好像上面 👆 的验证效果不太满足现实需要,下面 👇 再补充个 邮箱正则验证

/[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/

2.用正则表达式获取 url 中的想要的参数(get 类型 URL)

function _getImgStrValue(str, key) {
    return str.match(new RegExp("(^|&|/?)" + key + "=([^&]*)(&|$)")) ? str.match(new RegExp("(^|&|/?)" + key + "=([^&]*)(&|$)"))[2] : ''
}

e.g.
var res = 'failed=0&start_time=201908010000&end_time=201908012359&time_dur=1439&interval=&tail=Radar/CAPPI_Ref_256km&tail_label=Reflectivity, 256km&num_files=24&ticket=nan&dummy='

var t_label = _getImgStrValue(res, 'tail_label’) // Reflectivity, 256km

只需调用上面 👆 方法,传想要获取数据的对应 key 关键字符,方法就会获取当前 window 的 URL 路径并与正则进行匹配,然后返回想要的数据。

3.限制 input 框只能输入数字或’-’,若输入则可看到但会立马消失

@使用参考代码

<input type="text" id="question" maxlength="100" style="width: 38.1%;display: inline-block;" class="form-control" autocomplete="off" onkeyup="value=value.replace(/[^\d-]/g,'')">

使用正则,可以帮助我们很快的实现一些验证/过滤性功能,下面 👇 是一些对 input 输入内容进行验证的正则表达式,实现若在 input 输入违规字符,可以看到但会立马消失

① 令 input 框只能输入数字或’-’,不能输入其他字符包括中英文、特殊字符onkeyup="value=value.replace(/[^\d-]/g,'')
② 令 input 框只能输入 数字onkeyup="value=value.replace(/[^\d]/g,'')

4.对第 3.的补充和延伸学习

引用上面 👆第 3.,若要

③ 令 input 不能输入单引号、双引号,注意引号要为英文字符,如此便可让英式单引号和双引号时 可以看到但也会被置空onkeyup="value=value.replace(/['\"]/g,'’)
④ 令 input 只能输入单双引号onkeyup="value=value.replace(/[^'\"]/g,’’)

好,下面说下两种 input 内容正则验证的不同,下图第一种方法会检测输入的每一个值,但不合适的会把整个 value 值置空。第二种方法好些,检测每一个值,但只是把不合规矩的置空,其他的不改变。

使用方式:

第一种方法 onkeyup="value=contentLimit(value)"
第二种方法 onkeyup="value=charactersLimit(value)"

5.数组比较,一个对象数组,一个普通数组,要从对象数组中找到有 name 值跟普通数组的元素值相同的,就从对象数组中删掉

案例(图是网上找的,下面代码把 name 改为 id 就可以了)

如下方法(可以兼容 IE)

function unique (obj, ary){
  return obj.filter(function(item){
    return ary.indexOf(item.name) == -1;
  })
}

如果最后改 return ary.indexOf(item.id) != -1,则会返回被删除掉的对象数组的元素数据. 当然,也有使用 ES6 的,一句代码搞定,不过不兼容 IEconst newArr = obj.filter(item => !ary.includes(item.id)),因为 array.includes()不支持 IE

6.实现选择好相关格式的日期后,在某地显示出大写的日期(日期格式要为 yyyy-mm-dd)

先定义个数组
var weekDay = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
var date = $('#releaseDate').val(); // 获取到日期的数值,且日期格式要为 2018-02-16

meetDate = date.split("-“); // 拼接成数组
var dt = new Date(meetDate[0],(meetDate[1]-1),meetDate[2]); // 月数要减1

$('#weekDay').text(weekDay[dt.getDay()]); // weekDay数组顺序要按上面排序

To be continued