对文件选择框的input校验感觉很不合理。

对文件选择框的input校验感觉很不合理。

http://img1.sycdn.imooc.com//climg/5ef62c700821362015540869.jpg


第一点:

视频中老师说文件选择的input首先要进行非空校验(checkEmpty),但是其实后面两个校验(文件名长度的校验  和  后缀名的校验)就包含了非空校验的功能,所以这个非空校验感觉完全没有必要。




http://img1.sycdn.imooc.com//climg/5ef62c7e0843fff616000740.jpg


第二点:

对长度的校验也很奇怪,$(input).val().toLowerCase()返回的是一个绝对路径,至少在windows操作系统中,就算上传的是一个最简单的文件名为"a"的文件(没有扩展名,文件名就一个字"a"),长度最少都有13,小等于4的情况根本不存在。




http://img1.sycdn.imooc.com//climg/5ef62ca30835447116000740.jpg


第三点:

视频中,对后缀名校验只校验了最后三位,竟然没有包含"."。这就意味着,如果上传的是一个文件名为"abcjpg"的文件(没有后缀名),或者上传的是"a.abcjpg"胡乱编写后缀名的文件,这种非图片格式的文件也能通过校验。


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕阿园 2020-06-27 19:08:40

同学你好,
1,同学的理解是正确的,这里也可以不用判断是否为空
2,很抱歉上次没有理解同学的意思,返回的不是绝对路径的文件名,而是在前面加了C:\fakepath\后的路径,这是为了安全的问题,谷歌火狐等浏览器通过安全设置做了一个假路径,这样的话同学的考虑也是正确的,但是为了适应所有的浏览器,就判断长度是否小于4

如果我解决了你的疑惑,请采纳!祝学习愉快~


好帮手慕阿园 2020-06-27 17:18:08

同学你好
1,对input输入框的校验是针对所有input输入框的检验,而后面的两个校验是针对文件名的校验
2,$(input).val()是获取文件名,这里判断文件名的长度,而一个文件,最简单的a加上后缀名,长度都是不小于4的,所以这里判断如果文件名小于4是不合理的
3,老师这里只是判断了后缀名,同学可以使用.jpg等来判断是否为图片

如果我解决了你的疑惑,请采纳!祝学习愉快~


  • 提问者 慕丝1539783 #1
    1.针对后缀名的校验,就能判断是不是非空。如果能够通过后缀名的的校验,一定也能通过非空校验。所以这里的checkEmpty校验就是多此一举。 2.文件选择,$(input).val()返回的不是一个单纯文件名,是带有绝对路径的文件名,我在第二张图已经标明了,最终返回值为“c:\fakepath\a”。所以带有绝对路径的文件名,其长度不可能小于4。上传任何一个文件(无论文件名叫什么,无论是否有后缀名),$(input).val()返回值的长度一定是大于4的。所以判断长度小于4为错的,没有任何意义。
    2020-06-27 17:56:14
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师