2016-05-08 3 views
0

変数に0-9以外のものが含まれているかどうかを確認する必要があります。「 - 」と「+」文字と「」スペース)。数値、スペース '+'、 ' - 'だけを許可するPHP preg_match

私が書いたpreg_matchは機能しません。どんな助けもありがとう。 ^$が開始されてからから内側の正規表現しか含まない行だけにマッチすることを意味:

<?php 

$var="+91 9766554433"; 

if(preg_match('/[0-9 +\-]/i', $var)) 
echo $var; 
?> 
+1

なぜ機能しないと判断しましたか? – RomanPerekhrest

答えて

2

あなたが全体の文字クラスに数量詞として*を追加し、正規表現の開始と終了にanchorsを追加する必要があります行末までまた、i修飾子は、この正規表現で大文字と小文字を区別する必要がないため、不要です。

これは作業を行う必要があります。

if(!preg_match('/^[0-9 +-]*$/', $var)){ 
    //variable contains char not allowed 
}else{ 
    //variable only contains allowed chars 
} 
+2

実際には '+'をエスケープする必要はなく、 '--'はグループの最後の文字であるため、エスケープする必要もありません。 –

+0

ヒントをありがとう。それはグループの中にあり、したがって修飾子として解釈されない、と私は思う。 – cb0

+1

これは空文字列(星のため)にも当てはまります。少なくとも** 1つの**文字が必要な場合は、 '+'を使用してください。 – Jan

1

あなたの条件に一致するためにあなたの正規表現をテストするためにregex101.comを試すことができますし、左側のパネルに、あなたはPHP、Pythonの、とJavascriptのコードを生成するコードジェネレータを、見つけることができます。

$re = "/^[\\d\\s\\+\\-]+$/i"; 
$str = "+91 9766554433"; 

preg_match($re, $str, $matches); 

hereをご覧ください。

2

ただ、文字クラス否定:大文字小文字を区別しない修飾子は、あなたの場合には必須ではありません

if (preg_match('/^[0-9 +-]+$/', $var)) 
    echo $var; 

if (preg_match('/[^0-9 +-]/', $var)) 
    echo $var; 

またはアンカーと数量詞を追加します。

0

これが機能するかどうか試してみてください。私は事前にそれをテストするために周りに取得していないので、私はそれが動作しない場合はお詫び申し上げます。

if(!preg_match('/^[0-9]+.-.+." ".*$/', $var)){ 
    //variable contains char not allowed 
}else{ 
//variable only contains allowed chars 
} 
関連する問題