PHP regular expression and form registration case

A regular expression is a string with a specific pattern to match text

Preg match

$pattern = '/php/';
$subject = "php It's the best programming language, php No one!";

$result = preg_match($pattern,$subject);

if($result){
    echo "<h1>Matching success</h1>";
}else{
    echo "<h1>Match unsuccessful</h1>";
}

Preg? Match? All matches all

$pattern = '/php/';
$subject = "php Is the best programming language, not php Is not a good programmer!";
$result = preg_match_all($pattern,$subject,$matches);
var_dump($result);
var_dump($matches);

//preg_match===
//int 1
//array (size=1)
//  0 => string 'php' (length=3)

//preg_match_all ====
//int 2
//array (size=1)
//  0 =>
//    array (size=2)
//      0 => string 'php' (length=3)
//      1 => string 'php' (length=3)

Preg replace regular replace

preg_filter() is equivalent to preg_replace(), but it only returns results that match the target

$pattern = '/www\..*\.com/';
$replacement = 'www.test.com';
$subject = [
    'www.baidu.com',
    'www.google.com',
    'coding.test.com'
];
$result = preg_replace($pattern,$replacement,$subject);
var_dump($result);
//array(3) {
//    [0] =>
//  string(12) "www.test.com"
//    [1] =>
//  string(12) "www.test.com"
//    [2] =>
//  string(15) "coding.test.com"
//}

$result1 = preg_filter($pattern,$replacement,$subject);
var_dump($result1);
//array(2) {
//    [0] =>
//  string(12) "www.test.com"
//    [1] =>
//  string(12) "www.test.com"
//}

Regular search and replace with callback

$pattern = '/(.*)(\d{4})(-\d{2}-\d{2})/';
$subject = "Today is 2020-01-14";
$result = preg_replace_callback($pattern,'nextyear',$subject);
var_dump($result);

function nextyear($vars){
    return 'Next year's'.$vars[1].($vars[2]+1).$vars[3];//string(28) "Next year today is 2021-01-14"
}

//array (size=4)
//  0 = > string 'today is 2020-01-14' (length=19)
//  1 = > string 'today is' (length=9)
//  2 => string '2020' (length=4)
//  3 => string '-01-14' (length=6)

Preg? Grep? Invert returns a

$pattern = '/www\..*\.com/';
$subject = [
    'www.baidu.com',
    'www.google.com',
    'coding.imooc.com'
];
$result = preg_grep($pattern,$subject,PREG_GREP_INVERT);
var_dump($result);//string(16) "coding.imooc.com"

Preg ﹣ split string to array according to specified rules

$pattern = '/\||,|\s/';
$replacement = '|';
$subject = "php|asp,jsp html";

$result1 = preg_split($pattern,$subject,3);
var_dump($result1);

//array (size=4)
//  0 => string 'php' (length=3)
//  1 => string 'asp' (length=3)
//  2 => string 'jsp' (length=3)
//  3 => string 'html' (length=4)

Escape regular expression character

$str = '<a href="http://Www.test. Com "> test network < / a > ';
$result = preg_quote($str,'/');
$pattern = '/'.$result.'/';
$subject = '<a href="http://Www.test. Com "> test network < / a > ';
echo preg_match($pattern,$subject);

//\<a href\="http://Www \. Test \. Com "\ > test network \ < a \ >

() obtained separately

$pattern = '/[\da-z]+([\._\-]*[\da-z]+)*@[\da-z]+([\.\-][\da-z]+)*\.[a-z]+/i';
$subject = <<<php
    //imooc123@qq.com
    //IMOOC.123@qq.com
    //imooc_123@qq123.com
    //imooc--123@qq.com
    //imooc123@qq.com.cn
    //imooc123@vip-qq.com
php;

preg_match_all($pattern,$subject,$matches);
var_dump($matches);
//array(3) {
//    [0] = > / / print all matched
//  array(6) {
//        [0] =>
//    string(15) "imooc123@qq.com"
//        [1] =>
//    string(16) "IMOOC.123@qq.com"
//        [2] =>
//    string(19) "imooc_123@qq123.com"
//        [3] =>
//    string(17) "imooc--123@qq.com"
//        [4] =>
//    string(18) "imooc123@qq.com.cn"
//        [5] =>
//    string(19) "imooc123@vip-qq.com"
//  }
//  [1] = > / / print out the
//  array(6) {
//        [0] =>
//    string(0) ""
//        [1] =>
//    string(4) ".123"
//        [2] =>
//    string(4) "_123"
//        [3] =>
//    string(5) "--123"
//        [4] =>
//    string(0) ""
//        [5] =>
//    string(0) ""
//  }
//  [2] = > / / print out the
//  array(6) {
//        [0] =>
//    string(0) ""
//        [1] =>
//    string(0) ""
//        [2] =>
//    string(0) ""
//        [3] =>
//    string(0) ""
//        [4] =>
//    string(4) ".com"
//        [5] =>
//    string(3) "-qq"
//  }
//}

ajax registration form case

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="css/base.css" />
    <link rel="stylesheet" type="text/css" href="css/register.css" />
    <title>User registration form verification</title>
    <script src="js/jquery.js"></script>
</head>

<body>
<div class="wrapper container">
    <h2>User registration</h2>
    <form onsubmit="return post(this)">
        <p class="clearfix">
            <label class="one">phone number:</label>
            <input name="telphone" class="text" placeholder="Please enter your mobile number" />
            <label class="error">Please input the correct mobile number</label>
        </p>
        <p class="clearfix">
            <label class="one" >Check code:</label>
            <input name="code" class="code" type="text"  placeholder="Please input the 6-digit verification code of mobile phone" />
            <input class="get_code" type="button" value="Get verification code" />
            <label class="error">Please fill in the 6-digit verification code received by the mobile phone</label>
        </p>
        <p class="clearfix">
             <label class="one">Login password:</label>
            <input name="password" type="password"  class="text" placeholder="Please input 6-16 Bit password" />
            <label class="error">The password is 6.-16 Between characters</label>
        </p>
        <p class="clearfix">
            <label class="one">Confirm password:</label>
            <input name="c_password" type="password"  class="text" placeholder="Please enter the password again" />
            <label class="error">Confirm password and password are inconsistent</label>
        </p>
        <p class="clearfix">
            <label class="one">Full name:</label>
            <input name="name" type="text" class="text" placeholder="Please input 2-6 Bit Chinese" />
            <label class="error">Please input 2-6 Bit Chinese</label>
        </p>
        <p class="clearfix">
            <label class="one">ID</label>
            <input name="idcard" type="text"  class="text"  placeholder="Please input 18 digit second generation ID card number" />
            <label class="error">Please input 18 digit second generation ID card number</label>
        </p>
        <p class="clearfix">
            <label class="one">Mailbox:</label>
            <input name="email" type="text" class="text" placeholder="Please input Email mailbox" />
            <label class="error">Email Incorrect mailbox</label>
        </p>
           <p class="clearfix"><input class="submit" type="submit" value="Immediate registration"/></p>
    </form>
</div>
<script>
    function post(obj) {
        var postData = $(obj).serialize();
        $.post('php/check.php',{postData:postData},function (data) {
            if(data.code){
                $("input[name="+data.sign+"]").siblings('.error').show();
            }else{
                location.href = 'ok.html';
            }
        },'json');
        return false;
    }
</script>
</body>
</html>

ok.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Registration succeeded!</h1>
</body>
</html>

base.css

/* CSS Document */
*{margin:0; padding:0;}
a{text-decoration:none; cursor:pointer;}
li{list-style:none;}
img{border:none;}
html,body{ font-size:16px; font-family:"Microsoft YaHei"; overflow-x:hidden;}

.wrapper{width:820px; margin:0 auto;}
.left{float:left;}
.right{float:right;}
.clearfix:after{content:"."; display:block; clear:both; font-size:0; overflow:hidden; height:0;}
.clearfix{zoom:1;}
.red{color:#f93;}

.mt{ margin-top:10px;}
.mr{ margin-right:10px;}
.mb{ margin-bottom:10px;}
.ml{ margin-left:10px;}


/*----header-----*/

.header{height:35px; line-height:35px; background:#5a84d1; color:#fff; font-size:14px;}
.header a{color:#fff;}

.weixin{position:relative; display:block; width:120px; height:38px; text-align:center;}
.wx{display:inline-block; width:35px; height:35px; background:url(../img/weixinhui.png) no-repeat;}
.wx:hover{background:url(../img/weixin.png) no-repeat;}
.erweima{position:absolute; top:35px; left:0; display:block; width:120px; height:120px; border:1px solid #999; z-index:100;}

.header .right #time{margin-left:20px;}

.top{height:74px; width:1140px; margin:10px auto}
/*-------logo-------*/
.logo{height:74px; margin-right:15px;}
.logo a{display:block;}
.slogo{width:170px; height:60px; margin-top:10px; padding-left:10px; overflow:hidden; border-left:1px solid #ccc; font-size:20px;}


/*-------nav-------*/
.nav{float:right; height:30px; margin-top:30px; line-height:30px;}
.nav li{float:left; position:relative; width:115px; text-align:center;}
.nav li a{font-size:20px; color:#3a3a3a;}
.nav li:hover > a{color:#28a7e1}
.nav li:hover > ul{visibility:visible; opacity:1; }
.nav li a {text-decoration:none; display:inline-block;
    -webkit-transition:color 0.2s linear, background 0.2s linear;
    -moz-transition:color 0.2s linear, background 0.2s linear;
    -o-transition:color 0.2s linear, background 0.2s linear;
    transition:color 0.2s linear, background 0.2s linear; }
.subnav {visibility:hidden; opacity:0; position:absolute; top:30px; left:0; z-index:100; width:115px; text-align:center; background:rgba(0,0,0,0.4); 
    -webkit-transition:opacity 0.2s linear, visibility 0.2s linear; 
    -moz-transition:opacity 0.2s linear, visibility 0.2s linear; 
    -o-transition:opacity 0.2s linear, visibility 0.2s linear; 
    transition:opacity 0.2s linear, visibility 0.2s linear; }
.subnav li{clear:both; width:100%; border:0 none;}
.subnav li a{display:inline-block; color:#fff;}
.subnav li:hover > a{color:#80eef5;}


/*-------footer-----*/
.footer{background:#eee;  padding-bottom:50px;}
.footer a{color:#000;}
.list1{margin:20px 15px 40px;}
.list1 li{height:40px; line-height:40px;}
.list1 a.first:hover{background:url(img/redIcon.png) 0 6px no-repeat;}

.list1 a.first{/*float:left;*/margin-right:23px; text-indent:15px; font-weight:bold; color:#111;}

.sublist li{float:left;/**/ margin-right:11px;}
.sublist li a{color:#111;}

.par{text-align:center;}
.par a{padding:0 10px;}

.footer div.right{margin:20px 25px 40px 0; }


/*kefu*/
#sidekf{background:url(../img/222.png) no-repeat left bottom;width:225px; height:200px; position:fixed; _position:absolute; right:-139px;top:40px;_top:expression(documentElement.scrollTop+40);z-index:9;}
#sidekf .lnk{ float:left;width:225px;}
#sidekf .ovh{ float:right;width:35px; height:100px;}
#sidekf a{display:block;width:128px; margin-left:97px;}
.sidekf_qq1{height:33px; margin-top:35px;}
.sidekf_qq2{height:36px; margin-top:3px;}
.sidekf_qq3{height:36px; margin-top:3px;}

register.css

/* CSS Document */

.container{margin:5px auto; border:1px solid #D8D8D8; background: #F9F9F9; padding:50px; font-family:"Microsoft YaHei"}
.container h2{text-align:center; color:#333;}
form{margin:20px 0 0 120px;}
form p{margin-bottom:10px;}
form a{ color:#ff7702;}

h2{ line-height:60px; font-size:30px; color:#333;}
label{display:block; float:left; height:48px; line-height:48px; color:#F00; text-indent:10px;}
label.one{width:90px; height:48px; text-align:right; color:#333;}

input{float:left;font-size:16px; font-family:"Microsoft YaHei"; color:#666;}
.text,.submit{border:1px solid #ccc; width:300px; height:46px; text-indent:10px;}
.error{display: none;}

.code{height:46px; width:180px; _line-height:46px; text-indent:10px;}
.get_code{height:48px; width:110px; margin-left:10px; border:1px solid #ccc; cursor:pointer;}

.agreement{margin-left:90px; height:30px; line-height:30px;font-size:12px;}
.agreement input{display:block; line-height:30px; height:12px; margin:8px 8px 0 5px; border:none; width:12px; background:url(../img/checkbox.png) no-repeat; }
.get_code{background:#337AB7; color:#FFF;}

.submit{margin-left:90px; background:#F93; font-size:20px; letter-spacing:4px; color:#fff; cursor:pointer;}

p.last{margin-left:310px; font-size:16px;}
p.last input{ cursor:pointer;}

check.php

<?php
parse_str($_POST['postData'],$post);
if(!preg_match('/^1\d{10}$/',$post['telphone'])){
   echo json_encode(['code'=>1,'sign'=>'telphone']);
    return ;
}
if($post['code']!='123456'){
    echo json_encode(['code'=>1,'sign'=>'code']);
    return ;
}
if(!preg_match('/^.{6,16}$/',$post['password'])){
    echo json_encode(['code'=>1,'sign'=>'password']);
    return ;
}
if($post['c_password']!=$post['password']){
    echo json_encode(['code'=>1,'sign'=>'c_password']);
    return ;
}
if(!preg_match('/^[\x80-\xff]{6,18}$/',$post['name'])){
    echo json_encode(['code'=>1,'sign'=>'name']);
    return ;
}
if(!preg_match('/^\d{18}$/',$post['idcard'])){
    echo json_encode(['code'=>1,'sign'=>'idcard']);
    return ;
}
if(!preg_match('/^[\da-z]+([\._\-]*[\da-z]+)*@[\da-z]+([\.\-][\da-z]+)*\.[a-z]+$/',$post['email'])){
    echo json_encode(['code'=>1,'sign'=>'email']);
    return ;
}

//Write legal data to database
echo json_encode(['code'=>0]);

//UTF8 Chinese characters under coding Unicode Coding range:\x80-\xff

//array (size=1)
//'postData' => string 'telphone=111111&password=&c_password=&name=&idcard=&email=' (length=58)

//array (size=6)
//  'telphone' => string '111111' (length=6)
//  'password' => string '' (length=0)
//  'c_password' => string '' (length=0)
//  'name' => string '' (length=0)
//  'idcard' => string '' (length=0)
//  'email' => string '' (length=0)

Basic knowledge supplement:

Online debugging tools
http://www.regexr.com/

"Chinese characters" suggest to use Unicode code to match again
Online transcoding tool: http://tool.chinaz.com/tools/unicode.aspx

Invisible atom

Custom atom

General character type as atom

Meta character
Metacharacters are special characters with special meaning in regular expressions

 

Boundary qualifier

Classifier

 

No greed

? 

When the character is immediately followed by any other qualifier (*, +, {n,}, {n,m})
Later, the matching pattern is not greedy.

u

Pattern modifier

Mode unit
The mode unit () has three functions:
Group, restrict multiple structures, capture text

Backward reference
Reverse References: references to captured text content in pattern cells
The captured text is stored in a temporary buffer with a buffer number range of 1-99 and a reverse reference format of:
+ + number
Non capture metacharacter '?:'

Delimiter
When using regular functions, patterns need to be enclosed by delimiters.
Separator can make any non alphanumeric, non backslash, non white space character.
Frequently used separators are forward slash (/), hash (ා), and reverse (~).
If a separator needs to be matched within a pattern, it must be escaped with a backslash

Pattern modifier

Tags: PHP Mobile network Programming

Posted on Mon, 13 Jan 2020 23:25:54 -0500 by paladaxar