2011-12-15 11 views
2

こんにちはphpのpregmatchを使用して文字列をチェックする必要があります。有効であるためには、文字列は、マッチが順あなた」でなければならない場合には、少なくとも1つの大文字、少なくとも一つの小文字、その後、少なくとも1つのシンボルまたは数文字列に少なくとも1つの大文字、1つの小文字、1つの数字または記号があることを確認するにはPHPの正規表現が必要です

おかげ

+0

は、これらのことができます次の式では、少なくとも一つ下の文字、一つの上部のcharと1つの番号に検証します任意の順序で入力するか、最初に大文字を、次に小文字を、次に記号または数字を入力する必要がありますか?グループを混在させることはできますか? –

+0

http://www.regular-expressions.info/ – JamesHalsall

+0

なぜ正規表現ですか? phpは 'isdigit()'、 'islower()'などの関数を持っていませんか? – fge

答えて

3

を持っている必要があります

$result = (preg_match('/[A-Z]+/', $string) && preg_match('/[a-z]+/', $string) && preg_match('/[\d!$%^&]+/', $string)); 

:説明VEの文字が、私はそうわからない任意の順序にすることができた場合は、そのような3つの別々のチェックを行わず、

$result = preg_match('/[A-Z]+[a-z]+[\d!$%^&]+/', $string); 

を使用することができます人々が以下に指摘しているように、あなたは先読みでこれをすべて1つの正規表現で行うことができます。あなたの要求によると

+0

で簡単に書くことができます。最後のマッチングでは、スペースやあらゆる種類の特殊文字を使用できます。 – luastoned

+0

良い点、それを許可された文字のリストに更新します。 – awoods

0

[A-Z]+マッチ任意の大文字のchar

[a-z]+マッチ任意の小文字の文字

[\d§$%&]+マッチ数や特殊文字(必要であれば、より特別な追加)

結果は次のようになります。[A-Z]+[a-z]+[\d§$%&]+

これは理想的ではありません。 Regexrをチェックして、あなたの要件に合った正規表現を試してみてください。

5

あなたは先読み

^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d,.;:]).+$ 

here on Regexr

先読みにそれを参照してくださいを使用することによって、これを達成することができますが、それは文字と一致しないことを意味し、ゼロ幅アサーション、ある主張が述べられている場合、それはその位置からチェック本当です。すべてのアサーションは別々に評価されるため、文字は任意の順序で指定できます。どこかに文字列の場合

^は、文字列の先頭

(?=.*[a-z])チェックを照合し、どこかであればどこかに文字列の場合

(?=.*[A-Z])チェック小文字であること

(?=.*[\d,.;:])チェック大文字であります文字列は数字または他の文字の1つです。必要な文字を追加します。

.+$はできるだけ早くアサーションの一つが故障して、文字列

の終わりまでの文字列にマッチし、完全な正規表現は失敗します。

0

これらが必ずしも順不同でないようにするには、先読みが必要です。あなたはこのように、数字と特殊文字の多くを置くことができ

$result = preg_match('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])', $string); 

$result = preg_match('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9$%])', $string); 
関連する問題