正则表达式
综述正则表达式是一种可以用于模式匹配和替换的强有力的工具。正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
如何使用基本模式匹配?
模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符重复出现,或表示上下文。我们先看一些正则表达式中的特殊字符。
特殊字符"^"用来匹配以指定字符串开头的字符串。例如:
"^hello" :这个模式与字符串"hello,PHP world!"匹配,但是与"Say hello to you"不匹配。
特殊字符"$"用来匹配以指定字符串结尾的字符串。例如:
"you$" :这个模式与"How are you"匹配,与"your"不匹配。
当特殊字符"^"和"$"同时使用时,表示精确匹配。例如:
"^hello$" :这个模式只匹配字符串"hello"。
如果一个模式不包括"^"和"$",那么它与任何包含该模式的字符串匹配。例如: "you" :与字符串"What is your name?"是匹配的。
在该模式中的字母只是普通的字符,数字也是一样的。
如果要用到其他一些稍微复杂的字符,如标点符号和空白字符(比如空格、制表符等),就要要用到转义序列。所有的转义序列都用反斜杠("\")打头,例如制表符的转义序列是:"\t"。所以如果我们要检测一个字符串是否以制表符开头,可以用这个模式:
"^\t"
类似的,用"\n"表示换行,"\r"表示回车,反斜杠本身用"\\"表示,句号"."用"\."表示,依此类推。
如何使用字符簇?
如果要判断用户输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效,用普通的基于字面的字符串比较是不够的。所以要用一种更好的方法来描述我们想要的模式,这就是字符簇。
比如,要建立一个表示所有元音字符的字符簇,就可以这样做:
"[AaEeIiOoUu]" :这个模式与任何元音字符匹配,但只能表示一个字符。
用特殊符号"-"可以表示一个字符的范围,如:
"[a-z]" | //匹配字母a-z,即所有的小写字母 |
"[A-Z]" | //匹配字母A-Z,即所有的大写字母 |
"[a-zA-Z]" | //匹配所有的字母 |
"[0-9]" | //匹配所有的数字 |
"[0-9\.\-]" | //匹配所有的数字,以及句号和减号 |
"[ \f\r\t\n]" | //匹配所有的白字符 |
同样的,这些也只匹配一个字符。
如果要匹配由一个小写字母和一位数字组成的字符串,比如"a4"、"b5"或"f1",但不是"aa4"、"b5a4" 或"f12"的话,用这个模式:
"^[a-z][0-9]$"
尽管[a-z]代表26个字母的范围,但在这里它只能与第一个字符是小写字母的字符串匹配。
我们已经知道"^"表示字符串的开头,但是当在一组方括号里使用"^"时,它表示"非"或"排除"的意思,常常用来剔除某个字符。还用前面的例子,我们要求第一个字符不能是数字: "^[^0-9][0-9]$"
这个模式与"a4"、"b5"及" 2"是匹配的,但与"12"、"66"是不匹配的。下面是几个排除特定字符的例子:
"[^a-z]" //除了小写字母以外的所有字符
"[^\\\/\^]" //除了(\)(/)(^)之外的所有字符
"[^\"\']" //除了双引号(")和单引号(')之外的所有字符
特殊字符"." (点,英文句号)在正规表达式中用来匹配除了"换行"之外的所有字符。所以模式"^.5$"与任何两个字符的、以数字5结尾和以其他非"换行"字符开头的字符串匹配。模式"."可以匹配任何字符串,除了空串和只包括一个"换行"的字符串。
PHP的正规表达式有一些内置的通用字符簇,列表如下:
字符簇
|
含义
|
"[[:alpha:]]" | 任何字母 |
"[[:digit:]]" | 任何数字 |
"[[:alnum:]]" | 任何字母和数字 |
"[[:space:]]" | 任何白字符 |
"[[:upper:]]" | 任何大写字母 |
"[[:lower:]]" | 任何小写字母 |
"[[:punct:]]" | 任何标点符号 |
"[[:xdigit:]]" | 任何16进制的数字,相当于[0-9a-fA-F] |
在很多的情况下,我们可能要匹配一个单词或一组数字。一个单词有若干个字母组成,一组数字有若干个单一的数字组成。我们用跟在字符或字符簇后面的花括?quot;{}"来确定前面的内容的重复出现的次数:假设x是一个数字,那么{x}表示"前面的字符或字符簇只出现x次";一个数字加逗号,{x,}的意思是"前面的内容出现x或更多的次数";两个用逗号分隔的数字,{x,y}表示"前面的内容至少出现x次,但不超过y次"。
字符簇
|
含义
|
"^[a-zA-Z_]$" | 所有的字母和下划线 |
"^[[:alpha:]]{3}$" | 所有的3个字母的单词 |
"^a$" | 字母a |
"^a{4}$" | 不是以字母a开头并且有4个字母的单词,比如Aaaa |
^a{2,4}$" | aa,aaa或aaaa |
"^a{1,3}$" | a,aa或aaa |
"^a{2,}$" | 包含多于两个a的字符串,比如aaa,aaaa,aaaaa |
"^a{2,}" | 以两个a开头的单词,如:aardvark和aaab,但apple不行 |
"a{2,}" | 包含有两个a的单词,如:baad和aaa,但Nantucket不行 |
"\t{2}" | 两个制表符 |
".{2}" | 所有的两个字符 |
我们可以把模式扩展到更多的单词或数字:
"^[a-zA-Z0-9_]{1,}$" | 所有包含一个以上的字母、数字或下划线的字符串 |
"^[0-9]{1,}$" | 所有的正数 |
"^\-{0,1}[0-9]{1,}$" | 所有的整数 |
"^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$" | 所有的整数 |
最后一个例子我们可以这样考虑:所有以一个可选的负号(\-{0,1})开头(^)、跟着0个或更多的数字([0-9]{0,})、和一个可选的小数点(\.{0,1})再跟上0个或多个数字([0-9]{0,}),并且没有其他任何东西($)。
特殊字符"?"与"{0,1}"是相等的,它们都代表着:"0个或1个前面的内容"或"前面的内容是可选的"。所以:
"^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$"
可以简化为:
^\-?[0-9]{0,}\.?[0-9]{0,}$
特殊字符"*"与"{0,}"是相等的,它们都代表着"0个或多个前面的内容"。字符" "与{1,}是相等的,表示"1个或多个前面的内容",所以上面的4个例子可以写成:
"^[a-zA-Z0-9_] $" | 所有包含一个以上的字母、数字或下划线的字符串 |
"^[0-9] $" | 所有的正数 |
"^\-?[0-9] $" | 所有的整数 |
"^\-?[0-9]*\.?[0-9]*$" | 所有的小数 |

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

ToretrievedatafromaPHPsession,startthesessionwithsession_start()andaccessvariablesinthe$_SESSIONarray.Forexample:1)Startthesession:session_start().2)Retrievedata:$username=$_SESSION['username'];echo"Welcome,".$username;.Sessionsareserver-si

利用會話構建高效購物車系統的步驟包括:1)理解會話的定義與作用,會話是服務器端的存儲機制,用於跨請求維護用戶狀態;2)實現基本的會話管理,如添加商品到購物車;3)擴展到高級用法,支持商品數量管理和刪除;4)優化性能和安全性,通過持久化會話數據和使用安全的會話標識符。

本文討論了PHP中的crypt()和password_hash()的差異,以進行密碼哈希,重點介紹其實施,安全性和對現代Web應用程序的適用性。

文章討論了通過輸入驗證,輸出編碼以及使用OWASP ESAPI和HTML淨化器之類的工具來防止PHP中的跨站點腳本(XSS)。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。