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
Tags : php