2017-05-13 16 views
-1
if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $input,$oper)){ 
    $oprator = $oper[0]; 
} 

ここは私のコードです。私はプラス、マイナス、掛けることはできますが、1文字を分割することはできません。文字列に分割が含まれているかどうかを調べるには、このpreg_matchをどのように更新できますか?例えばスラッシュ/が文字列内にあるかどうかを確認する方法

私の文字列はそれほど8/2であるoprator次のように変数が/

+1

'\ /'をエスケープするか、デリミタを使用してください。 '#' – hassan

+1

これを試してみてください。/ [\/\ '^£$%&*()} {@#〜? = _ +¬ - ]/''/'を追加してエスケープする必要があります。 –

答えて

1

を取得する必要がありますあなたはそれをエスケープする必要がある場合:

if (preg_match('/[\/\'^£$%&*()}{@#~?><>,|=_+¬-]/', '5/8',$oper)){ 
    //   ^^ 
    $oprator = $oper[0]; 
    echo $oprator; 
} 

ライブ例:https://3v4l.org/HtN3N

たりも5月別の文字を使用するdelimiter from this list

0

トリック:エスケープする必要がある文字を文字の範囲で非表示にする(ただし、必ずしもそうであるとは限りません)。あなたのケースでは、あなたが区切り文字として丸括弧を選択した場合、あなたがそれを行うことができます。

if (preg_match('([#--/<[email protected]^_{-~£¬])u', '5/8', $oper)) 

範囲:

が含まれて含まれている含まれています

は、そうでない場合は、文字列とパターンを分離バイトとして見られている、あなたは£または¬ような文字とマルチバイト文字列を扱うとき、U修飾子を使用し、また

(ASCIIテーブルを参照してください)、あなたは予想外であってもよいですその結果、例えば:

var_dump(preg_match("([¬])","¯")); 

戻りint(1)¬が2バイトC2 AFに2バイトC2 AC¯上で符号化されるからです。 u修飾子がなければ、C2は一致します。

var_dump(preg_match("([¬])u","¯")); 

は、期待通りにint(0)を返します。

関連する問題