/ 網站開發

2024年05月22日 45

PHP 判斷字串是否為『連續字元』與『連續重複字元』


每次資通安全稽核都會有新花招
這次要求實作密碼不得與前3次(以上)密碼相同+不得與帳號相同
不得使用鍵盤『連續字元』也不得使用『連續重複字元』組成
天阿!真是個囉唆的情境 XD
終於寫出解法了,整理成兩個 function 趕快紀錄一下,以免下次用到時還要重寫:

判斷是否連續字元

// 判斷是否連續字元
function check_successive_str($str) {
  $match = '(123|234|345|456|567|678|789|abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz)';
  preg_match_all('/'.$match.'/', $str, $res);
  
  if (!empty($res[0])) {
    return true;
  }

  return false;
}

判斷是否連續重複字元

// 判斷是否連續重複字元 => 4位
function check_repeat_str($str) {
  // {3,} 改成 {2,} => 改為3位
  if (preg_match("/([\x80-\xff].|.)\\1{3,}/",$str)) {
    return true;
  }

  //utf-8
  if(preg_match("/([\x{4e00}-\x{9fa5}])\\1{3,}/u", $str, $out)) {
    // var_dump($out);
    // return '有連續重複4個字串 => '.$out[1];
    return true;
  }

  return false;
}

標籤: #PHP