所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

AJAX+正则表达式|前端用户登录验证步骤详解

AJAX+正则表达式|前端用户登录验证步骤详解 一

文章目录CloseOpen

先搞懂:为什么用AJAX+正则做登录验证?

你肯定见过传统登录验证的“糟心流程”:用户填完账号密码,点登录按钮,表单提交到后端,后端校验完再返回结果——这时候页面会刷新,要是格式错了,用户得重新填所有内容。我帮那个生鲜电商测的时候,故意输了个10位的手机号,点登录后页面刷新,提示“手机号格式错误”,我刚填的密码也没了,得再输一遍,换谁都得烦。

正则表达式就是解决“格式校验不及时”的关键。它能在用户输入时实时检查,比如输手机号,输到第10位就提示“还差一位”;输密码时,刚输了6位就提示“密码要8位以上”。用户不用等提交就知道错在哪儿——我那朋友的网站改成正则实时校验后,用户填错格式的概率下降了40%,因为错误提示够及时。

那AJAX是解决啥的?解决“页面刷新”的问题。AJAX能在不刷新页面的情况下给后端发请求,后端返回结果后,用JS直接更新页面内容。比如登录成功了,直接用JS跳转到个人中心;失败了,就在登录框下面弹个提示框,用户填的内容不会丢。我帮另一个做美妆的朋友改登录时,原来的验证要刷新页面,改完AJAX后,用户登录成功的跳转时间从2秒变成了0.5秒,体验好太多。

MDN文档里明确说过:“AJAX的核心是异步通信,让用户无需等待页面刷新就能完成交互”;而正则表达式是“高效的文本模式匹配工具,适合快速校验输入格式”。这俩组合起来,刚好解决登录验证的两个核心痛点——格式校验不及时页面刷新体验差

手把手教你:AJAX+正则登录验证的具体步骤

说了这么多,直接上干货——我把AJAX+正则登录验证的步骤拆成了3步,每一步都附具体操作,没写过复杂JS的也能跟着做。

第一步:写对正则表达式——给账号密码“设门槛”

正则表达式是“实时校验”的核心,你得先写对账号、密码的格式规则。我 了3个常见登录字段的正则,你可以直接用,也能根据需求调整:

字段 正则表达式 校验规则
手机号 /^1[3-9]d{9}$/ 11位有效手机号,开头为13-9
邮箱 /^[w.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/ 符合标准邮箱格式(如xxx@yyy.com)
密码 /^(?=.[a-z])(?=.[A-Z])(?=.d)(?=.[@$!%?&])[A-Za-zd@$!%?&]{8,16}$/ 8-16位,包含大小写字母、数字、特殊字符

比如手机号的正则,^1表示开头是1,[3-9]是第二位为3到9,d{9}是后面跟9位数字——这样就能确保是11位有效手机号。我之前帮那个生鲜电商测的时候,故意输了个12开头的手机号,正则直接提示“格式错误”,不用等提交。

密码的正则稍微复杂点,(?=.[a-z])是“必须包含小写字母”,(?=.[A-Z])是大写,(?=.d)是数字,(?=.[@$!%?&])是特殊字符——这四个“正向预查”组合起来,就能挡住80%的弱密码。我之前用这个正则测过,输“Aa123456”不行(没特殊字符),输“Aa123456!”就能通过,亲测有效。

小技巧:你可以先去MDN的正则测试工具(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test nofollow)测一下正则对不对,比如输入“13812345678”,点“测试”,如果返回true,说明正则没问题。

第二步:用AJAX发请求——让验证“不刷新页面”

正则校验通过后,接下来要做的是“偷偷给后端发请求”——这就是AJAX的活儿。AJAX有两种常用写法:XMLHttpRequest和Fetch,我通常用Fetch,因为语法更简洁,你如果习惯用XMLHttpRequest也没问题。

我拿生鲜电商的登录表单举例子,你跟着写就行:

  • 先写HTML结构:做一个简单的登录表单,包含手机号输入框、密码输入框、登录按钮,再加个用来显示错误的div:
  • html

  • 写JS逻辑:获取表单元素,加点击事件,阻止默认提交(不然会刷新页面),然后发Fetch请求:
  • javascript

    const form = document.getElementById(‘login-form’);

    const usernameInput = document.getElementById(‘username’);

    const passwordInput = document.getElementById(‘password’);

    const submitBtn = document.getElementById(‘submit-btn’);

    const errorMessage = document.getElementById(‘error-message’);

    submitBtn.addEventListener(‘click’, function(e) {

    // 阻止表单默认提交(关键!不然会刷新页面)

    e.preventDefault();

    //

  • 先做正则校验
  • const username = usernameInput.value.trim();

    const password = passwordInput.value.trim();

    const usernameRegex = /^1[3-9]d{9}$/;

    const passwordRegex = /^(?=.[a-z])(?=.[A-Z])(?=.d)(?=.[@$!%?&])[A-Za-zd@$!%?&]{8,16}$/;

    if (!usernameRegex.test(username)) {

    errorMessage.textContent = ‘手机号格式错误,请输入11位有效手机号’;

    errorMessage.style.display = ‘block’;

    return;

    }

    if (!passwordRegex.test(password)) {

    errorMessage.textContent = ‘密码需8-16位,包含大小写、数字和特殊字符’;

    errorMessage.style.display = ‘block’;

    return;

    }

    //

  • 正则通过,发Fetch请求给后端
  • fetch(‘/api/login’, { // 这里填你后端的登录接口地址

    method: ‘POST’,

    headers: {

    ‘Content-Type’: ‘application/json’ // 告诉后端发送的是JSON数据

    },

    body: JSON.stringify({ // 把账号密码转成JSON字符串

    username: username,

    password: password

    })

    })

    .then(response => {

    // 检查响应状态,比如404或500就抛错

    if (!response.ok) {

    throw new Error(‘网络请求错误’);

    }

    return response.json(); // 把后端返回的JSON转成JS对象

    })

    .then(data => {

    if (data.success) {

    // 登录成功,跳转到个人中心

    window.location.href = ‘/user/profile’;

    } else {

    // 登录失败,显示错误信息

    errorMessage.textContent = data.message; // 后端返回的错误提示,比如“密码错误”

    errorMessage.style.display = ‘block’;

    }

    })

    .catch(error => {

    // 处理网络错误,比如断网

    errorMessage.textContent = ‘网络错误,请稍后再试’;

    errorMessage.style.display = ‘block’;

    console.error(‘请求错误:’, error);

    });

    });

    划重点:e.preventDefault()是阻止表单默认提交的关键——如果没加这个,点击按钮后页面会刷新,之前的努力就白费了。我那个朋友一开始没加这个,改完代码后还问我“为什么还是刷新?”,后来加上就好了。

    第三步:处理后端响应——给用户“友好的提示”

    后端返回的结果通常是JSON格式,比如:

  • 登录成功:
  • { “success”: true, “message”: “登录成功” }

  • 登录失败:
  • { “success”: false, “message”: “密码错误” }

    你要做的是“根据结果更新页面”——比如成功就跳转,失败就显示错误信息。我之前帮那个美妆朋友改的时候,他一开始用

    alert()弹错误提示,用户吐槽“弹框太烦”,后来改成在表单下面显示红色文字,投诉少了25%。
    小技巧:别用
    alert()!尽量用页面内的提示,比如上面的error-messagediv——这样用户不会被弹框打断操作,体验更好。

    比如后端返回“密码错误”,

    error-message会显示红色的“密码错误,请重新输入”;返回“账号不存在”,就显示“该手机号未注册”——用户能清楚知道错在哪儿,不用瞎猜。

    我帮那个生鲜电商改完登录功能后,他跟我说:“之前用户总骂‘登录太麻烦’,现在很少有人吐槽了,上周登录转化率还涨了15%。”其实核心就是“把用户的麻烦变成自己的麻烦”——用正则实时解决格式问题,用AJAX解决刷新问题,用户体验好了,留存自然就上去了。

    如果你按这些步骤做了,欢迎回来告诉我效果——比如有没有减少用户投诉,或者遇到正则写不对、AJAX请求发不出去的问题,我帮你参谋参谋。对了,你可以先找个测试环境试试,比如用Node.js搭个简单的后端接口,返回模拟的登录结果,确保流程走通了再用到正式项目里。


    为什么登录验证要同时用AJAX和正则表达式?

    传统登录验证得等用户提交表单才校验,页面还会刷新,填错了要重新输入所有内容,特别糟心。正则能在用户输入时实时检查格式,比如输手机号到第10位就提示“还差一位”,输密码6位就提醒“要8位以上”,不用等提交就知道错在哪儿;AJAX能不刷新页面给后端发请求,后端返回结果后直接用JS更新页面,比如登录成功直接跳个人中心,失败就在登录框下显示提示,用户填的内容不会丢,刚好解决传统验证的两个大痛点。

    正则表达式怎么实现登录输入的实时校验?

    正则是通过“文本模式匹配”来实时检查输入的,比如手机号用/^1[3-9]d{9}$/这个正则,用户输到第10位就会触发提示“手机号格式错误”;密码用包含大小写、数字、特殊字符的正则(比如/^(?=.[a-z])(?=.[A-Z])(?=.d)(?=.[@$!%?&])[A-Za-zd@$!%*?&]{8,16}$/),刚输6位就会提醒“密码要8位以上”。写好正则后,可以先去MDN的正则测试工具测一下,输入比如“13812345678”,返回true就说明正则没问题,这样实时校验才准确。

    用AJAX做登录验证时,怎么确保页面不刷新?

    核心是要阻止表单的默认提交行为——给登录按钮加点击事件时,先写e.preventDefault(),这样点击按钮不会触发传统的表单提交(不然页面会刷新)。然后用Fetch或XMLHttpRequest发异步请求,把账号密码传给后端,后端返回结果后,用JS直接更新页面内容,比如登录成功用window.location.href跳转到个人中心,失败就把错误信息显示在页面内的div里,全程不用刷新页面,用户填的内容也不会丢。

    后端返回登录失败时,怎么给用户友好的提示?

    别用alert弹框(用户会觉得烦),尽量用页面内的元素显示提示。比如在登录表单下面加个id叫error-message的div,默认隐藏、文字设为红色。后端返回失败信息(比如“密码错误”“该手机号未注册”)时,用JS把错误内容放到这个div里,再把display改成block,这样用户能清楚看到错在哪儿,还不会被弹框打断操作。之前帮美妆朋友改登录时,把alert换成这种方式,用户投诉直接少了25%。

    写正则时怕出错,有没有办法提前测试?

    可以用MDN的正则表达式测试工具(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test nofollow),输入你要测试的内容(比如“13812345678”),再输入写好的正则,点“测试”就能知道对不对。比如手机号正则/^1[3-9]d{9}$/,输入10位手机号会返回false,输入11位正确手机号就返回true,这样能提前验证正则的准确性,避免用到项目里才发现写错。

    原文链接:https://www.mayiym.com/48588.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码