php正則測試
① php 正則表達式如何判斷一個字元串是否為合法的四則數學算式
代碼如下(經測通過):
<?php
$str="((1+1)*3.3)/10-12+(1+1)";
if(preg_match("/[+-*/.]{2}|[^+-*/()d.]+/i",$str,$matches)){
echo'非法算式';
}else{
if(substr_count($str,"(")==substr_count($str,")")){
echo'合法算式';
}else{
echo'括弧不匹配';
}
}
?>
判斷str里是否存在連續運算符、小數點或運算符、括弧、數字以外的字元
若存在則非法
若不存在則判斷str里( 和 )數量是否一致
② php 正則校驗是否是域名
1.檢測域名格式正確性的函數
//檢測域名格式
functionCheckUrl($C_url){
$str="/^http(s?)://(?:[A-za-z0-9-]+.)+[A-za-z]{2,4}(?:[/?#][/=?%-&~`@[]':+!.#w]*)?$/";
if(!preg_match($str,$C_url)){
returnfalse;
}else{
returntrue;
}
}
2.使用方法
$url="http://www..com/";//填寫你要檢測的域名
if(!CheckUrl($url)){
echo"域名格式不正確";
}else{
echo"域名格式正確";
}
③ UTF-8正則表達式如何匹配漢字,utf-8正則表達式_PHP教程
判斷輸入內容是否含有違法字元,請看下面代碼
$str = "編程";
if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
echo "您輸入的[".$str."]含有違法字元";
}
else
{
echo "您輸入的[".$str."]完全合法,通過!";
}
-----------------------
UTF-8匹配:在javascript中,要判斷字元串是中文是很簡單的。
比如:
代碼如下:
var str = "php編程";
if (/^[\u4e00-\u9fa5]+$/.test(str))
{
alert("該字元串全部是中文");
}
else
{
alert("該字元串不全部是中文");
}
php中,是用\x表示十六進制數據的。
於是,變換成如下的代碼:
代碼如下:
$str = "php編程";
if (preg_match("/^[\x4e00-\x9fa5]+$/",$str))
{
print("該字元串全部是中文");
}
else
{
print("該字元串不全部是中文");
}
貌似不報錯了,判斷的結果也正確,不過把$str換成「編程」兩字,結果卻還是顯示「該字元串不全部是中文」,看來這樣的判斷還是不夠准確。
重要:
查閱了《精通正則表達式》發現,對於[\x4e00-\x9fa5]這塊東西,自己做一個強化的解釋php的正則中, [\x4e00-\x9fa5],其實就是 字元和字元組的概念, \x{hex},表達一個16進制數, 需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必須加上大括弧,同時,如果是大於x{FF}的hex,必須和u 修飾符連用,不然會非法出錯
網上只能找到匹配全形字元的正則: ^[\x80-\xff]*^/ ,這里可以不加大括弧 [\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持 不過,既然\x表示的十六進制數據,為什麼和js里邊提供的范圍\x4e00-\x9fa5不一樣呢?
於是我就換成了下邊的代碼,發現真的准確了:
代碼如下:
$str = "php編程";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
print("該字元串全部是中文");
}
else
{
print("該字元串不全部是中文");
}
知道了php中utf-8編碼下用正則表達式匹配漢字的最終正確表達式——/^[\x{4e00}-\x{9fa5}]+$/u, 參考以上文章寫了如下一段測試代碼(復制以下代碼保存成.php文件)
<?php
$action = trim($_GET['action']);
if($action == "sub")
{
$str = $_POST['dir'];
if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str))
{
echo "您輸入的[".$str."]含有違法字元";
}
else
{
echo "您輸入的[".$str."]完全合法,通過!";
}
}
GBK:
代碼如下:
preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312漢字字母數字下劃線正則表達式
以上內容就是PHP中UTF-8正則表達式如何匹配漢字的全部內容,希望大家喜歡。
④ 需要一個PHP正則表達式來驗證密碼,不知道限制大小寫怎麼寫了,求教一下.
$str='你要輸入的密碼';
$model='/[A-Z]+[a-z]+.*/'; //最少要包含一個或者多個大寫或者小寫,和0個或則多個任意字元;
$modelength='/.{8,}/'; //輸入的最少為8位
if(!preg_match($modelength,'aaa')){
echo '密碼不能少於8位';
}
if(!preg_match($model,$str)){
echo '密碼必須包含大小寫';
}
也可以這樣寫
$str="Aaaa!";
$model='/[A-Z]+[a-z]+.*/'; //最少要包含一個或者多個大寫或者小寫,和0個或則多個任意字元;
$modelength='/.{8,}/'; //輸入的最少為8位
if(!preg_match($model,$str)||strlen($str)<8){
echo '密碼需要包含大小寫,或者密碼長度小於8位';
}
⑤ 如何運用PHP函數preg_match_all測試正則表達式效果
php自學網2< /div< div id="biuuu_3"php自學網3< /div'; PHP函數preg_match_all實例要求:分別將每一個DIV元素的ID和內容取出,如biuuu,biuuu_2,biuuu_3,php自學網,php自學網2和php自學網3(一些常用的抓站方法就是這樣匹配的) 分析:字元串是一個簡單的HTML元素,每一個DIV元素對應該一個ID和內容,並且是獨立的,首先考慮如何取出一個DIV內的ID值和內容, 如:php自學網,然後匹配其它類似的元素。一個DIV中需要取出兩個值,也就是兩個匹配的表達式,第一個表達式用於匹配ID值(biuuu),第二個表 達式用於匹配ID的內容(php自學網),正則表達式常用的表達式使用小括弧,那麼前面的元素將會變成如下形式: < div id="(biuuu)"(php自學網)< /div< div id="(表達式1)"(表達式2)< /div 表達式1:[a-zA-Z0-9_]+ (表示匹配大小寫字母,數字和下劃線) 表達式2:[^<]+ (表示不匹配<和字元) 這樣,PHP函數preg_match_all需要匹配的子表達式就實現了,但是還要需要匹配一個的表達式,方法如下: 表達式:/ '"(表達式1)"'(表達式2)/ 注意其中的雙引號"和/需要使用轉義字元轉義,然後把前面兩個表達式放進去,如下:
⑥ 求簡單的php 正則表達式(提取第一個冒號之前的字元串)
$temp="abcd:efghi:jklm";
$r=preg_replace('/([^:]+):.*/','$1',$temp);
echo$r;