2016-05-11 4 views
0

これまでの質問ではこのような問題について説明していましたが、問題の解決方法を実装できませんでした。preg_match multiple pattern

私はのためのパターンを作成しようとしました: 1.ビッグ文字を 2.小さな文字 3.数 4. SpecialChar

このすべての条件が私の文字列が含まれている必要があります。 私は条件1,2,3を確認することができます。私は条件番号4(特殊文字)を確認することができます

[0-9A-Za-z] 

[[:punct:]] 

しかし、私は仕事にそれらの組み合わせを取得することはできません:

$p = "aAbB4#"; //correct string 

if(!preg_match('/([0-9A-Za-z]{4,50}|[[:punct:]])/',$p)){ 
     $p = "Not all credentinals are correct"; 
} 

どうすればいいですか?

+0

、あなたは([ '\ A(?= [^ AZ] * [AZ])を探しています(a = z^-Z0-9 \ p {P}){a-zA-Z0-9} 4,50} \ z'](https://regex101.com/r/yI7pT8/1) –

+0

あなたはそれが特別な文字で終わらなければならないと言っていますか?または、特殊文字は文字列のどこでも有効ですか? –

+0

特殊な文字が含まれている必要があります。たとえば、 E#3a1d、?8dDsS –

答えて

1

使用このため、正の先読みマッチング、すなわち(?=)グループにすべての文字を入れる:おそらく

if (!preg_match('/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[[:punct:]]).{4,50}$/', $p)) { 
    ... 
} 
+0

yeeahh、man、働いているようです。 私はそれを理解しようとします。 (?=。* ....)のようなグループを使用していますか? タンク –