密码强度判断代码,js密码强度实时检测代码
分类:pc28.am

javascript密码强度校验代码,具体达成思路相当的少说了,请看下边代码和demo。

安详严整javascript古板方法完结异步校验,javascript校验

学习JavaScript异步兵高校验时屡次是从最古板的XMLHttpRequest学起,本文来谈一下对人生观校验的认知:
代码1index.jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<% 
  String basePath = request.getScheme() "://" request.getServerName() ":" request.getServerPort() request.getContextPath() "/"; 
%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
  <head> 
    <title>如何使用传统方法异步验证用户名的唯一性</title> 
    <script type="text/javascript"> 
      function goDemo(pageName){ 
        window.location.href='<%=basePath%>' pageName; 
      } 
    </script> 
  </head> 

  <body> 
    <center style="margin-top: 10%"><font style="color: red;font-size: 18pt;font-weight: bold;">如何使用传统方法异步验证用户名的唯一性</font></center><br> 
    例子一:<input type="button" value="例子一" onclick="goDemo('demo1.jsp');"/><br><br> 
    例子二:<input type="button" value="例子二" onclick="goDemo('demo2.jsp');"/><br><br> 
    例子一与例子二的区别:两者都实现了使用传统方法异步验证用户名的唯一性的功能,区别在于使用的servlet中的的方法不同:"例子一"使用的servlet中的doGet方法;"例子二"使用的servlet中的doPost方法。 
  </body> 
</html> 

代码2demo1.jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<% 
  String basePath = request.getScheme() "://" request.getServerName() ":" request.getServerPort() request.getContextPath() "/"; 
%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
  <head> 
    <title>使用的servlet中的doGet方法</title> 
    <script type="text/javascript"> 
      function checkUserName(){ 
        var value=document.getElementById("userName").value; 
        if(value==""){ 
          document.getElementById("showUserName").innerHTML="<font size="2" color=red>用户名不能为空!!!</font>"; 
        }else{ 
          var xmlHttpRequest = null; 
          if(window.XMLHttpRequest){/*适用于IE7以上(包括IE7)的IE浏览器、火狐浏览器、谷歌浏览器和Opera浏览器*/ 
            xmlHttpRequest = new XMLHttpRequest();//创建XMLHttpRequest 
          }else if(window.ActiveXObject){/*适用于IE6.0以下(包括IE6.0)的IE浏览器*/ 
            xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
          }//第一步:创建XMLHttpRequest对象,请求未初始化 

          xmlHttpRequest.onreadystatechange = function (){//readyState值发生改变时XMLHttpRequest对象激发一个readystatechange事件,进而调用后面的函数 
            if(xmlHttpRequest.readyState==1){ 
              xmlHttpRequest.send();//第三步:发送请求,也可以为xmlHttpRequest.send(null) 
            } 
            if(xmlHttpRequest.readyState==2){ 
              console.log("send()方法已执行,请求已发送到服务器端,但是客户端还没有收到服务器端的响应。"); 
            } 
            if(xmlHttpRequest.readyState==3){ 
              console.log("已经接收到HTTP响应头部信息,但是消息体部分还没有完全接收结束。"); 
            } 
            if(xmlHttpRequest.readyState==4){//客户端接收服务器端信息完毕。第四步:处理服务器端发回来的响应信息 
              if(xmlHttpRequest.status==200){//与Servlet成功交互 
                console.log("客户端已完全接收服务器端的处理响应。"); 
                var responseValue=xmlHttpRequest.responseText; 
                if(responseValue==1){ 
                  document.getElementById("showUserName").innerHTML="<font size="2" color="red"> 用户名已被使用!</font>"; 
                }else if(responseValue==2){ 
                  document.getElementById("showUserName").innerHTML="<font size="2" color="green"> 用户名有效!!!</font>"; 
                } 
              }else{//与Servlet交互出现问题 
                document.getElementById("showUserName").innerHTML="<font size="2" color="red">请求发送失败!</font>"; 
              } 
            } 
          }; 

          if(xmlHttpRequest.readyState==0){ 
            xmlHttpRequest.open("get","<%=basePath%>AjaxCheckUserNameServlet?userName=" value,true);//第二步:完成请求初始化,提出请求。open方法中的三个参数分别是:请求方式、路径、是否异步(true表示异步,false表示同步) 
          } 
        } 
      } 
    </script> 
  </head> 

  <body> 
    <center style="margin-top: 10%"><font style="color: red;font-size: 18pt;font-weight: bold;">使用的servlet中的doGet方法</font><br><br> 
         用户名:<input type="text" id="userName" name="userName" size="27" onblur="checkUserName();"> 
      <font size="2" id="showUserName"> *用户名必填,具有唯一性。</font> 
    </center> 
  </body> 
</html> 

代码3demo2.jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<% 
  String basePath = request.getScheme() "://" request.getServerName() ":" request.getServerPort() request.getContextPath() "/"; 
%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
  <head> 
    <title>使用的servlet中的doPost方法</title> 
    <script type="text/javascript"> 
      function checkUserName(){ 
        var value=document.getElementById("userName").value; 
        if(value==""){ 
          document.getElementById("showUserName").innerHTML="<font size="2" color=red>用户名不能为空!!!</font>"; 
        }else{ 
          var xmlHttpRequest = null; 
          if(window.XMLHttpRequest){/*适用于IE7以上(包括IE7)的IE浏览器、火狐浏览器、谷歌浏览器和Opera浏览器*/ 
            xmlHttpRequest = new XMLHttpRequest();//创建XMLHttpRequest 
          }else if(window.ActiveXObject){/*适用于IE6.0以下(包括IE6.0)的IE浏览器*/ 
            xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
          }//第一步:创建XMLHttpRequest对象,请求未初始化 

          xmlHttpRequest.onreadystatechange = function (){//readyState值发生改变时XMLHttpRequest对象激发一个readystatechange事件,进而调用后面的函数 
            if(xmlHttpRequest.readyState==1){ 
              xmlHttpRequest.send();//第三步:发送请求,也可以为xmlHttpRequest.send(null) 
            } 
            if(xmlHttpRequest.readyState==2){ 
              console.log("send()方法已执行,请求已发送到服务器端,但是客户端还没有收到服务器端的响应。"); 
            } 
            if(xmlHttpRequest.readyState==3){ 
              console.log("已经接收到HTTP响应头部信息,但是消息体部分还没有完全接收结束。"); 
            } 
            if(xmlHttpRequest.readyState==4){//客户端接收服务器端信息完毕。第四步:处理服务器端发回来的响应信息 
              if(xmlHttpRequest.status==200){//与Servlet成功交互 
                console.log("客户端已完全接收服务器端的处理响应。"); 
                var responseValue=xmlHttpRequest.responseText; 
                if(responseValue==1){ 
                  document.getElementById("showUserName").innerHTML="<font size="2" color="red"> 用户名已被使用!</font>"; 
                }else if(responseValue==2){ 
                  document.getElementById("showUserName").innerHTML="<font size="2" color="green"> 用户名有效!!!</font>"; 
                } 
              }else{//与Servlet交互出现问题 
                document.getElementById("showUserName").innerHTML="<font size="2" color="red">请求发送失败!</font>"; 
              } 
            } 
          }; 

          if(xmlHttpRequest.readyState==0){ 
            xmlHttpRequest.open("post","<%=basePath%>AjaxCheckUserNameServlet?userName=" value,true);//第二步:完成请求初始化,提出请求。open方法中的三个参数分别是:请求方式、路径、是否异步(true表示异步,false表示同步) 
          } 
        } 
      } 
    </script> 
  </head> 

  <body> 
    <center style="margin-top: 10%"><font color="red" size="5"><strong>使用的servlet中的doPost方法</strong></font><br><br> 
         用户名:<input type="text" id="userName" name="userName" size="27" onblur="checkUserName()"> 
      <font size=2 id="showUserName"> *用户名必填,具有唯一性。</font> 
    </center> 
  </body> 
</html> 

代码4AjaxCheckUserNameServlet.java文件:

package com.ghj.packagofserlet; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class AjaxCheckUserNameServlet extends HttpServlet { 

  private static final long serialVersionUID = 6387744976765210524L; 

  /** 
   * 处理demo1.jsp中异步验证 
   * 
   * @author GaoHuanjie 
   */ 
  public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { 
    try{ 
      response.setCharacterEncoding("UTF-8"); 
      request.setCharacterEncoding("UTF-8"); 
      PrintWriter out = response.getWriter(); 
      //System.out.println(1/0);//故意出现异常,以检查demo1.jsp中xmlHttpRequest.status!=200的分支语句是否可用 
      String userName=request.getParameter("userName");//获取“用户名” 
      System.out.println("处理demo1.jsp中异步验证,用户名为:" userName); 
      if ("admin".equals(userName)) { 
        out.print("1");//“1”表示用户名不可用。  
      } else { 
        out.print("2");//“2”表示用户名可用。 
      } 
      out.flush(); 
      out.close(); 
    }catch (Exception e) { 
      e.printStackTrace(); 
      response.setStatus(405); 
    } 
  } 

  /** 
   * 处理demo2.jsp中异步验证 
   * 
   * @author GaoHuanjie 
   */ 
  public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { 
    try{ 
      response.setCharacterEncoding("UTF-8"); 
      request.setCharacterEncoding("UTF-8"); 
      PrintWriter out = response.getWriter(); 
      //System.out.println(1/0);//故意出现异常,以检查demo2.jsp中xmlHttpRequest.status!=200的分支语句是否可用 
      String userName=request.getParameter("userName");//获取“用户名” 
      System.out.println("处理demo2.jsp中异步验证,用户名为:" userName); 
      if ("admin".equals(userName)) { 
        out.print("1");//“1”表示用户名不可用。 
      } else { 
        out.print("2");//“2”表示用户名可用。 
      } 
      out.flush(); 
      out.close(); 
    }catch (Exception e) { 
      e.printStackTrace(); 
      response.setStatus(405); 
    } 
  } 
} 

代码5web.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xmlns="http://java.sun.com/xml/ns/javaee"  
  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 

  <servlet> 
    <servlet-name>AjaxCheckUserNameServlet</servlet-name> 
    <servlet-class>com.ghj.packagofserlet.AjaxCheckUserNameServlet</servlet-class> 
  </servlet> 

  <servlet-mapping> 
    <servlet-name>AjaxCheckUserNameServlet</servlet-name> 
    <url-pattern>/AjaxCheckUserNameServlet</url-pattern> 
  </servlet-mapping> 

  <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
  </welcome-file-list> 
</web-app> 

以上便是应用传统艺术完结异步兵学校验的详实代码,希望对大家的就学抱有助于。

复制代码 代码如下:

js密码强度实时检验代码,js密码强度实时

密码强度的论断, 在注册网址客户的时候, 是二个亟要求做的政工, 差异的网址, 达成的法子是不均等的.
密码的决断, 其实也便是二个表单验证的内部意气风发项. 那大家来完结那样贰个简约的操作.

首先做三个简便的密码输入框和二个展现密码强度的速度条. 整个全体由vali_pass盒子富含. 这几个盒子包罗了标题, 密码框. 再个正是强迈进度条.

<div class="vali_pass">
  <h3>简单的密码强度检测</h3>
  <input type="password" name="pass">
  <div class="vali_pass_progress">

  </div>
</div>

诸如此比大家再来用CSS来吹牛一下

.vali_pass {
  width: 350px;
  margin: 0 auto;
  padding: 10px;
  border: #eee 1px solid;
  text-align: center;
}
.vali_pass input {
  width: 96%;
  display: block;
  margin: 0;
  padding: 5px;
  font-size: 14px;
  line-height: 20px;
}
.vali_pass_progress {
  margin-top: 10px;
  background-color: #efefef;
  height: 10px;
  border-radius: 5px;
}
.vali_pass_inner_progress {
  display: block;
  height: 100%;
  background-color: transparent;
  border-radius: 5px;
  width: 100%;
}

那个时候大家必要思索的是, 那几个进程条或然存在二种情状, 前度低的时候显得怎么状态, 中等射程度的时候显得怎么动静, 高程度的时候,呈现怎么状态.
OK, 大家那边用的时候进程条内部盒子的大幅,背景象的调整. 设置为八个样式

.error {
 background-color: #ff3300;
}
.middle {
 background-color: gold;
}
.strong {
 background-color: green;
}

这么HTML构造,CSS美化也就实现. 上边我们来做JS的监听.

先是少不了的是给密码输入框, 插足文本输入监听

ele_pass.onkeyup = function () {...}

对密码的剖断, 就得在这里个事件内做管理. 不过在管理在此以前, 大家得开始化一些数据. 比方进行密码判定的正则表明式.

var regxs = [];
regxs.push(/[^a-zA-Z0-9_]/g);
regxs.push(/[a-zA-Z]/g);
regxs.push(/[0-9]/g);

自个儿那边运用了多少个正则来挨门挨户判断密码的卓越度. 数据起头化达成后, 管理onkeyup事件. 首先是赢得那个输入框的值, 然后其长度. 长度大家这里调控起码6个字符. sec作为安全度的二个日增值. 每一回相称正则里的表明式, 就sec , 表明密码的安全度.然后换算成密码的100之内数值. 那几个值能够平价用在调节个中进程条的宽度.

ele_pass.onkeyup = function () {
  var val = this.value;
  var len = val.length;
  var sec = 0;
  if (len >= 6) { // 至少六个字符
    for (var i = 0; i < regxs.length; i  ) {
      if (val.match(regxs[i])) {
        sec  ;
      }
    }
  }
  var result = (sec / regxs.length) * 100;
  ele_progress.style.width = result   "%";
}

进程条宽度调控好后, 大家一时是看不出进程条的机能的, 看日前的CSS代码. 这几个暗中认可的背景是晶莹的. 那下边大家还得调控分歧安全值, 他的背景颜色的调控.下边的代码正是用来支配其背景象的.

if(result > 0 && result <= 50){
  ele_progress.setAttribute("class",begin_classname   " error");
}else if (result > 50 && result < 100) {
  ele_progress.setAttribute("class",begin_classname   " middle");
} else if (result == 100) {
  ele_progress.setAttribute("class",begin_classname   " strong");
}

最后的JS代码:

var ele_pass = document.getElementsByTagName("input")[0];
var ele_progress = document.getElementsByClassName("vali_pass_inner_progress")[0];
var begin_classname = ele_progress.className;
var regxs = [];
regxs.push(/[^a-zA-Z0-9_]/g);
regxs.push(/[a-zA-Z]/g);
regxs.push(/[0-9]/g);

ele_pass.onkeyup = function () {
  var val = this.value;
  var len = val.length;
  var sec = 0;
  if (len >= 6) { // 至少六个字符
    for (var i = 0; i < regxs.length; i  ) {
      if (val.match(regxs[i])) {
        sec  ;
      }
    }
  }
  var result = (sec / regxs.length) * 100;
  ele_progress.style.width = result   "%";
  if(result > 0 && result <= 50){
    ele_progress.setAttribute("class",begin_classname   " error");
  }else if (result > 50 && result < 100) {
    ele_progress.setAttribute("class",begin_classname   " middle");
  } else if (result == 100) {
    ele_progress.setAttribute("class",begin_classname   " strong");
  }

}

那我们的成效也来操作一下寻访:

图片 1

如上就是本文的全体内容,希望对大家学习javascript程序设计具备助于。

率先种办法:

您大概感兴趣的稿子:

  • javascript将异步兵高校验表单改写为联合表单

学习JavaScript异步校验时多次是从最守旧的XMLHttpRequest学起,本文来谈一下对金钱观校验的认...

<script type="text/javascript">
//CharMode函数
//测量试验有个别字符是归属哪豆蔻梢头类.
function CharMode(iN){
if (iN>=48 && iN <=57) //数字
return 1;
if (iN>=65 && iN <=90卡塔尔国 //大写字母
return 2;
if (iN>=97 && iN <=122) //小写
return 4;
else
return 8; //特殊字符
}

你恐怕感兴趣的篇章:

  • js在客户端验证密码强度,宽容Fire福克斯和IE
  • 用于判别顾客注册时,密码强度的JS代码
  • JavaScript 密码强度判定代码
  • JS 密码强度验证(包容IE,火狐,谷歌(Google卡塔尔(英语:State of Qatar)卡塔尔
  • javascript 密码强度验证法规、打分、验证(给出前端代码,后端代码可依照强度法则翻译)
  • Js密码强度实时验证代码
  • JavaScript剖断密码强度(自写代码卡塔尔
  • js查证密码强度(低中高卡塔尔(قطر‎附图
  • javascript密码强度校验代码(二种格局)
  • js检查评定顾客输入密码强度

密码强度的论断, 在登记网址客户的时候, 是一个一定要做的事体, 分化的网址, 完成的方法是不后生可畏...

/* *密码安全程度 *return :全部为字母或者数字,或者密码长度小于 *return : 字母数字组成,或者字母特殊字符,或者数字和特殊字符 *return : 字母和数字和特殊字符 */ String.prototype.passwordStrength=function(){ if(this.length> && this.length<=) return ; var n = (this.search ? : , n =  != -) ? : , n =(this.search(/[~`!@#$%^&*\_ -=[]|{};':",./\?]{,}/) != -) ? : ; return n n n; }

//bitTotal函数
//总结出脚下密码当中大器晚成共有个别许种方式
function bitTotal(num){
modes=0;
for (i=0;i<4;i ){
if (num & 1) modes ;
num>>>=1;
}
return modes;
}

demo

//checkStrong函数
//再次回到密码的强度等级

    js密码强度  .pw_letter{ margin-top:px; font-size: px; } .pw_letter label{float: left; margin-right:px; cursor: default; font-size: px; line-height: px;;} .pw_letter span{ float: left; display:inline-block; width:px; height:px; line-height:px; text-align:center; color:#FFF; background-color:#ccc; border-left: px solid #FFF;} .pw_letter span.pw_strength_color{ background-color:green;}     安全程度 弱 中 强   /* *&#23494;&#30721;&#23433;&#20840;&#31243;&#24230; *return &#65306;&#20840;&#37096;&#20026;&#23383;&#27597;&#25110;&#32773;&#25968;&#23383;,&#25110;&#32773;&#23494;&#30721;&#38271;&#24230;&#23567;&#20110; *return : &#23383;&#27597;&#25968;&#23383;&#32452;&#25104;&#65292;&#25110;&#32773;&#23383;&#27597;&#29305;&#27530;&#23383;&#31526;&#65292;&#25110;&#32773;&#25968;&#23383;&#21644;&#29305;&#27530;&#23383;&#31526; *return : &#23383;&#27597;&#21644;&#25968;&#23383;&#21644;&#29305;&#27530;&#23383;&#31526; */ String.prototype.passwordStrength=function(){ if(this.length&gt; &amp;&amp; this.length&lt;=) return ; var n = (this.search &amp;#63; : , n =  != -) &amp;#63; : , n =(this.search(/[~`!@#$%^&amp;*\_ -=[]|{};':",./&lt;&gt;&amp;#63;]{,}/) != -) &amp;#63; : ; return n n n; } String.prototype.trim = String.prototype.trim || function(){ return this.replace; } function setPasswordStrength{ var strength_span = document.getElementsByClassName; for(var i=; i&lt;strength_span.length; i  ){ strength_span.item.className="strength"; } for(var i=; i&lt;pwd.passwordStrength{ document.getElementsByClassName.className="strength pw_strength_color"; } }  

function checkStrong(sPW){
if (sPW.length<=4)
return 0; //密码太短
Modes=0;
for (i=0;i<sPW.length;i ){
//测量检验每二个字符的种类并总计大器晚成共有个别许种模式.
Modes|=CharMode(sPW.charCodeAt(i));
}

第三种办法:

return bitTotal(Modes);

javascript代码如下:

}

function AuthPasswd { if { if(/[a-zA-Z] /.test &amp;&amp; /[0-9] /.test &amp;&amp; /W D /.test { noticeAssign; }else if(/[a-zA-Z] /.test || /[0-9] /.test || /W D /.test { if(/[a-zA-Z] /.test &amp;&amp; /[0-9] /.test { noticeAssign; }else if(/[a-zA-Z] /.test &amp;&amp; /W D /.test { noticeAssign; }else if &amp;&amp; /W D /.test { noticeAssign; }else{ noticeAssign; } } }else{ noticeAssign; }}function noticeAssign { $.css({backgroundColor:'#009900'}); $.css({backgroundColor:'#009900'}); $.css({backgroundColor:'#009900'}); $.html.html.html; }else if{ $.css({backgroundColor:'#ffcc33'}); $.css({backgroundColor:'#ffcc33'}); $.css; $; $; $; }else if.css({backgroundColor:'#dd0000'}); $.css; $.css; $; $; $; }else{ $; $; $; $.css; $.css; $.css; }}

//pwStrength函数
//当顾客推广键盘或密码输入框失去焦点时,根据差异的等第展现分化的颜色

如上通过三种艺术介绍了javascript密码强度校验代码,希望对我们有着协助。

function pwStrength(pwd){
O_color="#eeeeee";
L_color="#FF0000";
M_color="#FF9900";
H_color="#33CC00";
if (pwd==null||pwd==''){
Lcolor=Mcolor=Hcolor=O_color;
}
else{
S_level=checkStrong(pwd);
switch(S_level) {
case 0:
Lcolor=Mcolor=Hcolor=O_color;
case 1:
Lcolor=L_color;
Mcolor=Hcolor=O_color;
break;
case 2:
Lcolor=Mcolor=M_color;
Hcolor=O_color;
break;
default:
Lcolor=Mcolor=Hcolor=H_color;
}
}

document.getElementById("strength_L").style.background=Lcolor;
document.getElementById("strength_M").style.background=Mcolor;
document.getElementById("strength_H").style.background=Hcolor;
return;
}
</script>

<form name=form1 action="" >
输入密码:<input type=password size=10 onKeyUp=pwStrength(this.value卡塔尔国onBlur=pwStrength(this.value卡塔尔(英语:State of Qatar)>
<br>密码强度:
<table width="217" border="1" cellspacing="0" cellpadding="1" bordercolor="#cccccc" height="23" style='display:inline'>
<tr align="center" bgcolor="#eeeeee">
<td width="33%" id="strength_L">弱</td>
<td width="33%" id="strength_M">中</td>
<td width="33%" id="strength_H">强</td>
</tr>
</table>
</form>

你或然感兴趣的稿子:

  • JS 密码强度验证(包容IE,火狐,Google卡塔尔
  • js核算密码强度(低中高卡塔尔国附图
  • 用于剖断客户注册时,密码强度的JS代码
  • Js密码强度实时验证代码
  • javascript密码强度校验代码(二种办法)
  • js在顾客端验证密码强度,宽容Fire福克斯和IE
  • js检查评定顾客输入密码强度
  • javascript 密码强度验证法则、打分、验证(给出前端代码,后端代码可依据强度法则翻译)
  • js密码强度实时检验代码
  • JavaScript注册时密码强度校验代码

本文由pc28.am发布于pc28.am,转载请注明出处:密码强度判断代码,js密码强度实时检测代码

上一篇:动态语言vs动态类型语言,php怎样促成的二叉树遍 下一篇:没有了
猜你喜欢
热门排行
精彩图文