php使用正则验证密码字段的复杂强度 原创

目录
  • 一. php密码复杂示例
  • 二. 高级版简单写法
  • 三. 总结

密码涉及到安全问题,简单的密码很容易被暴力破解,所以密码设计的复杂程序尤为重要。通常情况下密码由大小写字母、数字、特殊符号组成。比如前端需要用户设置密码时,可以使用javascript进行正则判断,密码不符合要求时弹窗或输出提示,那就不要使用php等后端语言了?不使用后端语言是不安全的,因为其他人可以直接使用postman等自定义参数提交你的URL接口。一般情况下前端可不做js判断,使用ajax提交php后端程序接口,由后端判断后返回json数据,进行用户密码复杂程序提示。

一. php密码复杂示例

<?php
function check_password($password) {
    $pattern1='/[A-Z]/';
    $pattern2='/[a-z]/';
    $pattern3='/[0-9]/';
    $pattern4='/[_.\-#$%]/';

    if(strlen($password)<6) {
        echo "密码需要至少包含6个字符";
        exit;
    }
    if(!preg_match($pattern1,$password)) {
        echo "密码需要至少一个大写字母";
        exit;
    }
    if(!preg_match($pattern2,$password)) {
        echo "密码需要至少一个小写字母";
        exit;
    }
    if(!preg_match($pattern3,$password)) {
        echo "密码需要至少一个数字";
        exit;
    }
    if(!preg_match($pattern4,$password)) {
        echo "密码需要至少一个特殊符号:_.-#$%";
        exit;
    }
    echo "密码符合要求";
}
echo check_password('jb51.net');

输出结果:

密码需要至少一个大写字母

示例代码由浅入深详细讲解:

1. echo check_password('jb51.net');  echo—php字符串打印输出,运行check_password()方法,字符串参数—jb51.net;

2. $pattern1='/[A-Z]/'; 变量$pattern1赋值,后面的正则表达式规则:A-Z是指26个大写英文字母,放在[]中的指其中一个,两边的两个斜杠"/"表示正则表达式的定界符;

3. $pattern2='/[a-z]/'; a-z是指26个小写英文字母;

4. $pattern3='/[0-9]/'; 0-9是指0到9共10个数字;

5. $pattern4='/[_.\-#$%]/'; _.\-#$%是指字符_.-#$%,细心的朋友发现了吗,中间有个反斜杠\,这个是特殊字符的转义。通常正则表达式中匹配特殊字符"\"、"?"、"*"、"^"、"$"、"+"、"("、")"、"|"、"{"、"[",都需要用反斜杠("\")进行转义;

6. 字符串'jb51.net'大于6个字符,strlen() 函数返回字符串的长度,不报错;

7. preg_match('正则表达式','需要匹配的字符串') 函数用于执行一个正则表达式匹配,preg_match还有其他的参数,有需要查看相关说明,preg_match的值将是 0 次(不匹配)或 1 次;

8. 从上往下运行到preg_match($pattern1,$password)时,preg_match匹配到'jb51.net'没有大写字母,值为0,加上'!'后值为真,输出"密码需要至少一个大写字母!",'exit'退出脚本执行。

二. 高级版简单写法

上面的示例朋友们可能发现有4个规则,进行了5次判断,考虑到运行效率和代码简洁,高级版简单写法如下:

<?php
function check_password($password) {
    $pattern5='/^(?![a-zA-Z_.\-#$%]+$)(?![a-zA-Z0-9]+$)(?![\d_.\-#$%]+$)(?![a-z\d_.\-#$%]+$)(?![A-Z\d_.\-#$%]+$)[\w.\-#$%]{6,30}$/';
    if(!preg_match($pattern5,$password)) {
        echo "密码不符合要求!";
        exit;
    }
    echo "密码符合要求";
}
echo check_password('jb51.net');

输出结果:

密码不符合要求!

示例代码由浅入深详细讲解:

正则表达式讲解,\w匹配一个英文字母、数字或下划线;\w等价于[0-9a-zA-Z_];\d匹配一个数字;等价于[0-9];.\-#$%见上面讲解;{6,30}对前面数量控制,表示是6到30个;?![a-zA-Z_.\-#$%]+$指不包含字符串'a-zA-Z_.\-#$%'。

三. 总结

本文讲解php使用正则验证密码字段的复杂度,由浅入深简单易懂,看懂的朋友可以举一反三。比如使用preg_match("/^[0-9]+$/", $password)) 验证全是数字,注意前面没有'!'。比如使用return json_encode(['code' => 0, 'msg' => '提示']);返回给前端json格式数据,供前端ajax回调处理。

到此这篇关于php使用正则验证密码字段的复杂度的文章就介绍到这了,更多相关php正则验证密码强度内容请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后多多支持我们!

(0)

相关推荐

  • 正则表达式匹配不包含某些字符串的技巧

    经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤"hede"字串,但这种写法是错误的.我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的意思是字符串里不能包含'h','e','d'三个但字符.那什么样的正则表达式能过滤出不包含完整"hello"字串的信息呢? 事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确.就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配,从而解决我们的问

  • 详解PHP处理密码的几种方式

    在 PHP中,经常会对用户身份进行认证.本文意在讨论对密码的处理,也就是对密码的加密处理. MD5 相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这样的: $password = md5($_POST["password"]); 上面这段代码是不是很熟悉?然而MD5的加密方式目前已经不太安全了,因为它的加密算法实在是显得有点简单了,而且很多破解密码的站点都存放了很多经过MD5加密的密码字符串,所以这里我是非常不提倡还在单单使用MD5来加密

  • PHP判断密码强度的方法详解

    本文实例讲述了PHP判断密码强度的方法.分享给大家供大家参考,具体如下: 一.php页面 $score = 0; if(!empty($_GET['value'])){ //接收的值 $str = $_GET['value']; } else{ $str = ''; } if(preg_match("/[0-9]+/",$str)) { $score ++; } if(preg_match("/[0-9]{3,}/",$str)) { $score ++; } if

  • PHP正则表达式笔记与实例详解

    本文实例讲述了PHP正则表达式笔记与实例.分享给大家供大家参考,具体如下: 这里主要介绍如何在PHP使用正则表达式,并附带几个实例. 这两天工作用到了正则表达式,发现自己已经忘记的差不多了,囧啊!找来以前的学习笔记,好好看了一下,又巩固了这些知识,工作算是完成了,不过正则要学的东西还是蛮多的,以下是整理的以前的笔记和一些实例! 笔记: 一.正则表达式的介绍: 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作.     1. 用途:匹配.查找.

  • php使用正则验证密码字段的复杂强度 原创

    目录 一. php密码复杂示例 二. 高级版简单写法 三. 总结 密码涉及到安全问题,简单的密码很容易被暴力破解,所以密码设计的复杂程序尤为重要.通常情况下密码由大小写字母.数字.特殊符号组成.比如前端需要用户设置密码时,可以使用javascript进行正则判断,密码不符合要求时弹窗或输出提示,那就不要使用php等后端语言了?不使用后端语言是不安全的,因为其他人可以直接使用postman等自定义参数提交你的URL接口.一般情况下前端可不做js判断,使用ajax提交php后端程序接口,由后端判断后

  • JavaScript正则验证密码强弱度的实现方法

    展示 设计 密码强弱度分析 密码由数字,字母,特殊符号组成 密码: 只有数字- 或者是只有字母,或者是只有特殊符号--1级:弱 两两组合: 数字和字母, 数字和特殊符号, 字母和特殊符号--2级:中 三者都有: 数字和字母和特殊符号--3级:强 代码 版本一:基本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Do

  • IOS正则表达式之验证密码身份证手机号

    IOS正则表达式之验证密码身份证手机号 在项目中,我们在验证用户的输入,最简单的方法就是使用正则表达式了,ios系统也提供很方便的方法,让我们可以轻松的来验证用户名,密码,身份证好 ,手机号等; 下面附上我在项目中用到的正则表达式的验证方法, 由于比较常用,大家最好封装成+静态的方法,便于使用: 我把常用的方法,使用静态方法封装到一个 Utils类里面,直接使用类名调用即可: 头文件: // // Utils.h // AutoSizing // // Created by on 15/2/7.

  • jQuery正则验证注册页面经典实例

    本文实例讲述了jQuery正则验证注册页面功能.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>正则验证注册页面</title> <style type="text/css"> .red{ color:#cc0000; font-weigh

  • PHP实现的常规正则验证helper公共类完整实例

    本文实例讲述了PHP实现的常规正则验证helper公共类.分享给大家供大家参考,具体如下: 主要代码功能: 弥补平时项目对于验证功能这块的不严谨.具体细分的常规验证, 手机号/电话/小灵通验证, 字符串长度区间合法验证, 邮箱验证, 使用正则验证数据. /** * * * 常规验证helper公共类 * * */ class CheckForm { //手机号/电话/小灵通 验证 public function Mobile_check($mobile,$type = array()) { /*

  • PHP正则验证字符串是否为数字的两种方法并附常用正则

    php 正则验证字符串是否为数字 方法一: php中利用正则表达式验证字符串是否为数字一件非常容易的事情,最主要的是如何写好正则表达式以及掌握正则表达式的写法,在此利用正则表达式的方式来列举一下判断数字的方法. <? if($str) { if(eregi("^[0-9]+$",$str)) { $str=(int)$str; } else { echo "获取到的数据不是有效的数字类型,操作将停止!"; exit(); } } else { echo &qu

  • 原生js实现表单的正则验证(验证通过后才可提交)

    实现了如下功能: 1.用户名:onfouc显示msg规则:onkeyup计算字符,其中中文为两个字符:onblur,验证是否通过 2.邮箱:onblur 正则匹配,正则是根据自己的需求写的,可以根据个人需求更改 3..密码:onkeyup时显示密码的强弱度,onblur时验证密码,是否为相同字符,是否全字符,或全数字,长度是否符合要求 4.确认密码:验证是否和上一次一致 5.提交按钮只有在全部input验证通过后才有效,否则无效 主要知识点: 1.中文为两个字符: function getLen

  • 正则匹配密码只能是数字和字母组合字符串功能【php与js实现】

    本文实例讲述了正则匹配密码只能是数字和字母组合字符串功能.分享给大家供大家参考,具体如下: 密码要求: 1. 不能全部是数字 2. 不能全部是字母 3. 必须是数字和字母组合 4. 不包含特殊字符 5. 密码长度6-30位的字符串 /** * @desc get_pwd_strength()im:根据密码字符串判断密码结构 * @param (string)$mobile * return 返回:$msg */ function get_pwd_strength($pwd){ if (strle

  • JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位

    废话不多说了,直接给大家贴代码了,具体代码如下所示: checkpassword = function(v){ var numasc = 0; var charasc = 0; var otherasc = 0; if(0==v.length){ return "密码不能为空"; }else if(v.length<8||v.length>12){ return "密码至少8个字符,最多12个字符"; }else{ for (var i = 0; i &

  • 正则验证不能含有中文的实现方法【jQuery与java实现】

    本文实例讲述了正则验证不能含有中文的实现方法.分享给大家供大家参考,具体如下: jQuery利用正则验证不能含有中文 var myReg = /^[a-zA-Z0-9_]{0,}$/; if (!myReg.test(input.val())) { $.validation.tip(false, input, "用户名不能含有中文或特殊字符"); return; } Java验证字符串没有中文 if (nickname.getBytes().length != nickname.len

随机推荐