正則表達式和數組(20161023)

注意:以preg開頭的是關於正則表達式的,$reg則是要寫表達式,用於匹配出頁面上的重要信息javascript

  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<?php
//$s = "he8llo5wor6ld";
//$s = preg_replace("/\d/","#",$s); 
//按照正則表達式替換    $s = preg_replace("正則","替換成什麼",被操做的字符串);
//$attr = preg_split("/\d/",$s); //按照正則表達式拆分
//$arr = array();
//preg_match("/\d/",$s,$arr); 
//匹配知足正則的第一個字符串        preg_match("正則",字符串,數組)
//preg_match_all("/\d/",$s,$arr); //匹配全部知足正則的字符串
//var_dump($arr);

//數組定義
//$attr = array(); //定義一個空的數組
//$attr = array(1,2,3,4); //定義一個有值的數組
/*$attr[0]="aa";
$attr[1]="bb";
var_dump($attr);*/

//數組分爲兩種
//1.索引數組
//$attr = array(1,2,3,4,5);
//print_r($attr);
//2.關聯數組
//$attr = array("code"=>101,"name"=>"張三","sex"=>"男");
//print_r($attr);
//echo $attr["name"];

//遍歷數組
//$attr = array("aa","bb","cc","dd");

//1.for循環遍歷,只能遍歷索引數組
/*for($i=0;$i<count($attr);$i++)
{
    echo $attr[$i]."<br>";
}*/

//2.foreach遍歷,關聯索引都支持
/*foreach($attr as $v)
{
    echo $v."<br>";
}*/
//既想取值,也想取key
/*foreach($attr as $k=>$v)
{
    echo $k."---".$v."<br>";
}*/

//3.使用each()和list()結合遍歷
//var_dump(each($attr)); //取數組裏面當前指針指向的元素
//list($a,$b,$c,$d)=$attr; //寫在等號左邊的,將數組裏面的元素交給一組變量,數組必須是索引數組
/*list($k,$v) = each($attr);
echo $k;
echo $v;*/
/*while(list($k,$v) = each($attr))
{
    echo "{$k}--{$v}<br>";
}*/


//4.使用指針遍歷
//current($attr); //取當前指針指向的元素的值
//echo key($attr); //取當前指針指向的元素的key
//next($attr); //將指針向後調一個
//next($attr);
//prev($attr); //將指針向前調一個
//end($attr); //將指針指向最後
//reset($attr); //將指針重置
//echo current($attr);


/*while(next($attr))
{
    echo current($attr);
    echo key($attr);
}*/

/*do
{
    echo current($attr);
    echo key($attr);
}
while(next($attr))
*/


//var_dump($_FILES);

/*預約義數組

global
    聲明爲全局變量
$GLOBALS
    引用全局做用域中可用的全局變量
$_SERVER
    服務器和執行環境信息
$_ENV
    環境變量
$_GET
    HTTP GET 變量
    var_dump($_GET);    使用get方式傳遞過來的數據
$_POST
    HTTP POST 變量
$_REQUEST
    HTTP Request 變量
$_FILES
    HTTP 文件上傳變量
    存儲文件信息    
array (size=1)
  二維數組:array裏面有一個file數組,file數組的值在array
  'file' =>     數組
    array (size=5)
      'name' => string 'actpic2.gif' (length=11) 文件名
      'type' => string 'image/gif' (length=9) 文件類型
      'tmp_name' => string 'D:\wamp\tmp\phpF29F.tmp' (length=23) 文件上傳後存儲的臨時文件目錄
      'error' => int 0    錯誤信息
      'size' => int 195910    大小 單位字節,B
    
$_SESSION
    Session 變量    
    session默認的過時時間是15分鐘,會把用戶名和密碼存在服務器
    session的安全性好一些;可是會對服務器形成壓力
$_COOKIE
    HTTP Cookies
    cookie不會過時;會把用戶名和密碼存在客戶端
session和cookie是用來作會話控制的,程序裏面用來保存用戶登陸信息的機制
    容易被解析

*/





$attr = array(
    array("n001","漢族"),
    array("n002","回族"),
    array("n003","滿族"),
    array("n004","維吾爾族")
);


echo "<select>";
echo "<option>全部的</option>";

foreach($attr as $v)
{
    echo "<option>{$v[1]}</option>";
}


echo "</select>";





?>



<!--<select>
    <option>全部</option>
    <?php
        
        /*foreach($attr as $v)
        {
            echo "<option>{$v[1]}</option>";
        }*/
    ?>
</select>-->


</body>
</html>
1023morningtest.php

  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<!--
<form action="1023morningtest.php" method="post" >
    <input type="text" name="uid" />
    <input type="text" name="pwd" />
    <input type="submit" value="提交" />
</form>

-->


<form action="1023morningtest.php" method="post" enctype="multipart/form-data">
<!--提交文件的話須要寫         
    enctype="multipart/form-data"
    要用post傳值方式
-->
    <input type="file" name="file" />
    <input type="submit" value="提交" />
</form>

<!--<img src="http://localhost:8080/0904/test.php?uid=www&pwd=123" />-->

<!--

request方式不安全,由於:使用img的src就能夠攻擊,找到頁面傳了兩個值過去

-->



</body>
</html>
1023morningceshi.php

 

正則表達式php

 

元字符html

描述java

\正則表達式

將下一個字符標記符、或一個向後引用、或一個八進制轉義符。例如,「\\n」匹配\n。「\n」匹配換行符。序列「\\」匹配「\」而「\(」則匹配「(」。即至關於多種編程語言中都有的「轉義字符」的概念。編程

^數組

匹配輸入字符串的開始位置。若是設置了RegExp對象的Multiline屬性,^也匹配「\n」或「\r」以後的位置。安全

$服務器

匹配輸入字符串的結束位置。若是設置了RegExp對象的Multiline屬性,$也匹配「\n」或「\r」以前的位置。cookie

*

匹配前面的子表達式任意次。例如,zo*能匹配「z」,「zo」以及「zoo」,可是不匹配「bo」。*等價於{0,}。

+

匹配前面的子表達式一次或屢次(大於等於1次)。例如,「zo+」能匹配「zo」以及「zoo」,但不能匹配「z」。+等價於{1,}。

?

匹配前面的子表達式零次或一次。例如,「do(es)?」能夠匹配「do」或「does」中的「do」。?等價於{0,1}。

{n}

n是一個非負整數。匹配肯定的n次。例如,「o{2}」不能匹配「Bob」中的「o」,可是能匹配「food」中的兩個o。

{n,}

n是一個非負整數。至少匹配n次,最多不限。例如,「o{2,}」不能匹配「Bob」中的「o」,但能匹配「foooood」中的全部o。「o{1,}」等價於「o+」。「o{0,}」則等價於「o*」。

{n,m}

m和n均爲非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,「o{1,3}」將匹配「fooooood」中的前三個o。「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。

?

當該字符緊跟在任何一個其餘限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的。非貪婪模式儘量少的匹配所搜索的字符串,而默認的貪婪模式則儘量多的匹配所搜索的字符串。例如,對於字符串「oooo」,「o+?」將匹配單個「o」,而「o+」將匹配全部「o」。

.點

匹配除「\r\n」以外的任何單個字符。要匹配包括「\r\n」在內的任何字符,請使用像「[\s\S]」的模式。

(pattern)

匹配pattern並獲取這一匹配。所獲取的匹配能夠從產生的Matches集合獲得,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號字符,請使用「\(」或「\)」。

(?:pattern)

非獲取匹配,匹配pattern但不獲取匹配結果,不進行存儲供之後使用。這在使用或字符「(|)」來組合一個模式的各個部分是頗有用。例如「industr(?:y|ies)」就是一個比「industry|industries」更簡略的表達式。

(?=pattern)

非獲取匹配,正向確定預查,在任何匹配pattern的字符串開始處匹配查找字符串,該匹配不須要獲取供之後使用。例如,「Windows(?=95|98|NT|2000)」能匹配「Windows2000」中的「Windows」,但不能匹配「Windows3.1」中的「Windows」。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配以後當即開始下一次匹配的搜索,而不是從包含預查的字符以後開始。

(?!pattern)

非獲取匹配,正向否認預查,在任何不匹配pattern的字符串開始處匹配查找字符串,該匹配不須要獲取供之後使用。例如「Windows(?!95|98|NT|2000)」能匹配「Windows3.1」中的「Windows」,但不能匹配「Windows2000」中的「Windows」。

(?<=pattern)

非獲取匹配,反向確定預查,與正向確定預查相似,只是方向相反。例如,「(?<=95|98|NT|2000)Windows」能匹配「2000Windows」中的「Windows」,但不能匹配「3.1Windows」中的「Windows」。

(?<!pattern)

非獲取匹配,反向否認預查,與正向否認預查相似,只是方向相反。例如「(?<!95|98|NT|2000)Windows」能匹配「3.1Windows」中的「Windows」,但不能匹配「2000Windows」中的「Windows」。這個地方不正確,有問題

x|y

匹配x或y。例如,「z|food」能匹配「z」或「food」(此處請謹慎)。「(z|f)ood」則匹配「zood」或「food」。

[xyz]

字符集合。匹配所包含的任意一個字符。例如,「[abc]」能夠匹配「plain」中的「a」。

[^xyz]

負值字符集合。匹配未包含的任意字符。例如,「[^abc]」能夠匹配「plain」中的「plin」。

[a-z]

字符範圍。匹配指定範圍內的任意字符。例如,「[a-z]」能夠匹配「a」到「z」範圍內的任意小寫字母字符。

注意:只有連字符在字符組內部時,而且出如今兩個字符之間時,才能表示字符的範圍; 若是出字符組的開頭,則只能表示連字符自己.

[^a-z]

負值字符範圍。匹配任何不在指定範圍內的任意字符。例如,「[^a-z]」能夠匹配任何不在「a」到「z」範圍內的任意字符。

\b

匹配一個單詞邊界,也就是指單詞和空格間的位置(即正則表達式的「匹配」有兩種概念,一種是匹配字符,一種是匹配位置,這裏的\b就是匹配位置的)。例如,「er\b」能夠匹配「never」中的「er」,但不能匹配「verb」中的「er」。

\B

匹配非單詞邊界。「er\B」能匹配「verb」中的「er」,但不能匹配「never」中的「er」。

\cx

匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符。x的值必須爲A-Z或a-z之一。不然,將c視爲一個原義的「c」字符。

\d

匹配一個數字字符。等價於[0-9]。

\D

匹配一個非數字字符。等價於[^0-9]。

\f

匹配一個換頁符。等價於\x0c和\cL。

\n

匹配一個換行符。等價於\x0a和\cJ。

\r

匹配一個回車符。等價於\x0d和\cM。

\s

匹配任何不可見字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。

\S

匹配任何可見字符。等價於[^ \f\n\r\t\v]。

\t

匹配一個製表符。等價於\x09和\cI。

\v

匹配一個垂直製表符。等價於\x0b和\cK。

\w

匹配包括下劃線的任何單詞字符。相似但不等價於「[A-Za-z0-9_]」,這裏的"單詞"字符使用Unicode字符集。

\W

匹配任何非單詞字符。等價於「[^A-Za-z0-9_]」。

\xn

匹配n,其中n爲十六進制轉義值。十六進制轉義值必須爲肯定的兩個數字長。例如,「\x41」匹配「A」。「\x041」則等價於「\x04&1」。正則表達式中可使用ASCII編碼。

\num

匹配num,其中num是一個正整數。對所獲取的匹配的引用。例如,「(.)\1」匹配兩個連續的相同字符。

\n

標識一個八進制轉義值或一個向後引用。若是\n以前至少n個獲取的子表達式,則n爲向後引用。不然,若是n爲八進制數字(0-7),則n爲一個八進制轉義值。

\nm

標識一個八進制轉義值或一個向後引用。若是\nm以前至少有nm個得到子表達式,則nm爲向後引用。若是\nm以前至少有n個獲取,則n爲一個後跟文字m的向後引用。若是前面的條件都不知足,若n和m均爲八進制數字(0-7),則\nm將匹配八進制轉義值nm。

\nml

若是n爲八進制數字(0-7),且m和l均爲八進制數字(0-7),則匹配八進制轉義值nml。

\un

匹配n,其中n是一個用四個十六進制數字表示的Unicode字符。例如,\u00A9匹配版權符號(&copy;)。

\p{P}

小寫 p 是 property 的意思,表示 Unicode 屬性,用於 Unicode 正表達式的前綴。中括號內的「P」表示Unicode 字符集七個字符屬性之一:標點字符。

其餘六個屬性:

L:字母;

M:標記符號(通常不會單獨出現);

Z:分隔符(好比空格、換行等);

S:符號(好比數學符號、貨幣符號等);

N:數字(好比阿拉伯數字、羅馬數字等);

C:其餘字符。

*注:此語法部分語言不支持,例:javascript

< >

匹配詞(word)的開始(<)和結束(>)。例如正則表達式<the>可以匹配字符串"for the wise"中的"the",可是不能匹配字符串"otherwise"中的"the"。注意:這個元字符不是全部的軟件都支持的。

( )

將( 和 ) 之間的表達式定義爲「組」(group),而且將匹配這個表達式的字符保存到一個臨時區域(一個正則表達式中最多能夠保存9個),它們能夠用 \1 到\9 的符號來引用。

|

將兩個匹配條件進行邏輯「或」(Or)運算。例如正則表達式(him|her) 匹配"it belongs to him"和"it belongs to her",可是不能匹配"it belongs to them."。注意:這個元字符不是全部的軟件都支持的。

+

匹配1或多個正好在它以前的那個字符。例如正則表達式9+匹配九、9九、999等。注意:這個元字符不是全部的軟件都支持的。

?

匹配0或1個正好在它以前的那個字符。注意:這個元字符不是全部的軟件都支持的。

{i} {i,j}

匹配指定數目的字符,這些字符是在它以前的表達式定義的。例如正則表達式A[0-9]{3} 可以匹配字符"A"後面跟着正好3個數字字符的串,例如A12三、A348等,可是不匹配A1234。而正則表達式[0-9]{4,6} 匹配連續的任意4個、5個或者6個數字

 

 

 

 

1、校驗數字的表達式

 1 數字:^[0-9]*$

 2 n位的數字:^\d{n}$

 3 至少n位的數字:^\d{n,}$

 4 m-n位的數字:^\d{m,n}$

 5 零和非零開頭的數字:^(0|[1-9][0-9]*)$

 6 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

 7 帶1-2位小數的正數或負數:^(\-)?\d+(\.\d{1,2})?$

 8 正數、負數、和小數:^(\-|\+)?\d+(\.\d+)?$

 9 有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$

10 有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$

11 非零的正整數:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

12 非零的負整數:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$

13 非負整數:^\d+$ 或 ^[1-9]\d*|0$

14 非正整數:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

15 非負浮點數:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

16 非正浮點數:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

17 正浮點數:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

18 負浮點數:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

19 浮點數:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

2、校驗字符的表達式

 1 漢字:^[\u4e00-\u9fa5]{0,}$

 2 英文和數字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

 3 長度爲3-20的全部字符:^.{3,20}$

 4 由26個英文字母組成的字符串:^[A-Za-z]+$

 5 由26個大寫英文字母組成的字符串:^[A-Z]+$

 6 由26個小寫英文字母組成的字符串:^[a-z]+$

 7 由數字和26個英文字母組成的字符串:^[A-Za-z0-9]+$

 8 由數字、26個英文字母或者下劃線組成的字符串:^\w+$ 或 ^\w{3,20}$

 9 中文、英文、數字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$

10 中文、英文、數字但不包括下劃線等符號:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

11 能夠輸入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+

12 禁止輸入含有~的字符:[^~\x22]+

3、特殊需求表達式

 1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

 2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

 3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

 4 手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

 5 電話號碼("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

 6 國內電話號碼(0511-440522二、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

 7 身份證號(15位、18位數字):^\d{15}|\d{18}$

 8 短身份證號碼(數字、字母x結尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

 9 賬號是否合法(字母開頭,容許5-16字節,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

10 密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-zA-Z]\w{5,17}$

11 強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 

12 日期格式:^\d{4}-\d{1,2}-\d{1,2}

13 一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$

14 一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

15 錢的輸入格式:

16    1.有四種錢的表示形式咱們能夠接受:"10000.00" 和 "10,000.00", 和沒有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$

17    2.這表示任意一個不以0開頭的數字,可是,這也意味着一個字符"0"不經過,因此咱們採用下面的形式:^(0|[1-9][0-9]*)$

18    3.一個0或者一個不以0開頭的數字.咱們還能夠容許開頭有一個負號:^(0|-?[1-9][0-9]*)$

19    4.這表示一個0或者一個可能爲負的開頭不爲0的數字.讓用戶以0開頭好了.把負號的也去掉,由於錢總不能是負的吧.下面咱們要加的是說明可能的小數部分:^[0-9]+(.[0-9]+)?$

20    5.必須說明的是,小數點後面至少應該有1位數,因此"10."是不經過的,可是 "10" 和 "10.2" 是經過的:^[0-9]+(.[0-9]{2})?$

21    6.這樣咱們規定小數點後面必須有兩位,若是你認爲太苛刻了,能夠這樣:^[0-9]+(.[0-9]{1,2})?$

22    7.這樣就容許用戶只寫一位小數.下面咱們該考慮數字中的逗號了,咱們能夠這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

23    8.1到3個數字,後面跟着任意個 逗號+3個數字,逗號成爲可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

24    備註:這就是最終結果了,別忘了"+"能夠用"*"替代若是你以爲空字符串也能夠接受的話(奇怪,爲何?)最後,別忘了在用函數時去掉去掉那個反斜槓,通常的錯誤都在這裏

25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$

26 中文字符的正則表達式:[\u4e00-\u9fa5]

27 雙字節字符:[^\x00-\xff]    (包括漢字在內,能夠用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1))

28 空白行的正則表達式:\n\s*\r    (能夠用來刪除空白行)

29 HTML標記的正則表達式:<(\S*?)[^>]*>.*?</\1>|<.*? />    (網上流傳的版本太糟糕,上面這個也僅僅能部分,對於複雜的嵌套標記依舊無能爲力)

30 首尾空白字符的正則表達式:^\s*|\s*$或(^\s*)|(\s*$)    (能夠用來刪除行首行尾的空白字符(包括空格、製表符、換頁符等等),很是有用的表達式)

31 騰訊QQ號:[1-9][0-9]{4,}    (騰訊QQ號從10000開始)

32 中國郵政編碼:[1-9]\d{5}(?!\d)    (中國郵政編碼爲6位數字)

33 IP地址:\d+\.\d+\.\d+\.\d+    (提取IP地址時有用)

相關文章
相關標籤/搜索