php字串搜尋
紀錄一些常用的字串比對與字串搜尋方法,這些主要用來檢查使用者輸入的資料,畢竟搜尋資料多數都在資料庫時就處理掉了,只有少數情況會需要使用php搜尋已儲存的資料。
email檢查
注意這個方式要php5.2版本以後才能使用
資料來源 https://stackoverflow.com/questions/1725907/check-if-a-string-is-an-email-address-in-php
//php版本需>5.2
if(filter_var("some@address.com", FILTER_VALIDATE_EMAIL)) {
// valid address
}
密碼
常用的密碼限制檢查,現在越來越多密碼改成英文大寫、英文小寫、數字、符號4選3就是了。
//英文 數字 符號 3選2
if(isset($_POST['newpwd']) && !preg_match("/^(?![a-zA-Z]+$)(?![\W_]+$)(?![0-9]+$)[a-zA-Z0-9\W_]{8,}$/", $_POST["newpwd"])){
$_SESSION['errmsg'] = "密碼格式不符合,至少要包含2種字元,8~20個字元";
}
//英文數字
preg_match("/^[a-zA-Z0-9]+$/", "檢查字串");
//加i可忽略大小寫
preg_match("/^[a-zA-Z0-9]+$/i", "檢查字串");
手機
台灣手機用,這邊沒有檢查+886的輸入方法。
if(!preg_match("/^09[0-9]{2}\-[0-9]{3}\-[0-9]{3}$/", $_POST["teahcer_phone"])){
return 0;
}
字串比對
strpos
只回傳ture或false,不需要取得剩下字串的話速度最快。
strpos($originalString, $checkString, $offset);
//檢查字串 檢查的字 起始位置
if (strpos($mystring, "program.") !== false) {
echo("True");
}
preg_match
preg_match($pattern, $inputString, $matches, $flag, $offset);
/*
$regexPattern 必填 它是我們將在原始字串中搜尋的模式。
$string 必填 它是我們將在原始字串中搜尋的字串。
$matches 選填 這個引數中儲存了匹配過程的結果。
$flag 選填 這個引數指定了標誌。這個引數有兩個標誌:PREG_OFFSET_CAPTURE 和 PREG_UNMATCHED_AS_NULL。
$offset 選填 這個引數告訴我們匹配過程的開始位置
*/
$mystring = "This is a php program.";
$search = "a";
if(preg_match("/{$search}/i", $mystring)) {
echo "True"; } else {
echo("False");
}
strstr
有找到會返回找到的位子後面的字串,沒有回false。
$email = 'aaa@example.com';
$domain = strstr($email, '@');
echo $domain; // @example.com
stristr
strstr不區分大小寫的模式,其他功能與strstr完全一樣。
$email = 'aab@example.com';
$test = strstr($email, 'B');
echo $test; // b@example.com
substr_count
統計字串出現的次數
substr_count($haystack,$needle,$offset,$length);
/*
$haystack 必填 檢查字串
$needle 必填 要找的字串
$offset 選填 起始位置
$length 選填 最大搜尋長度
*/
$text = 'This is a test';
echo substr_count($text, 'is'); // 2