のいくつかの特殊文字(ユーロ記号など)の数を、次の正規表現$text
を使用して数えています。preg_match_all
preg_match_all('/[\[|\]|€\{|}|\\|\^|\||~]/u', $text);
奇妙な理由で、PHPは3番目のパラメーターを要求します。ただし、preg_match_allのドキュメントによると、オプションであると想定されています。
警告:preg_match_all()は、少なくとも3つのパラメーターを想定しており、2つが指定されています。
私が提供する場合PREG_PATTERN_ORDER
(なぜ私がすべきかわからない場合でも)私は得る:
パラメータ3を参照で渡すことはできません。
だから、私のコードの何が問題になっていますか?必要に応じて、関数全体を次に示します。
public function getMessageCount($text)
{
$specials = preg_match_all('/[\[|\]|€\{|}|\\|\^|\||~]/u', $text)
$characters = strlen($text) + $specials;
if(in_array(strtolower($this->method), self::$classic_plans)) :
if($characters >= 0 && $characters <= 160) return 1;
if($characters >= 161 && $characters <= 306) return 2;
if($characters >= 307 && $characters <= 459) return 3;
if($characters >= 460 && $characters <= 612) return 4;
return 5;
endif;
if(in_array(strtolower($this->method), self::$basic_plans)) :
if($characters >= 0 && $characters <= 160) return 1;
if($characters >= 161 && $characters <= 312) return 2;
if($characters >= 313 && $characters <= 468) return 3;
if($characters >= 469 && $characters <= 624) return 4;
if($characters >= 625 && $characters <= 780) return 5;
if($characters >= 781 && $characters <= 936) return 6;
if($characters >= 937 && $characters <= 1092) return 7;
if($characters >= 1093 && $characters <= 1248) return 8;
return 9;
endif;
return in_array(strtolower($this->method), self::$zero_plans) ? 1 : null;
}