2

パスワードフィールドのフォーム検証用にこの正規表現を作成しました

"/^[[A-Za-z0-9]+[A-Za-z0-9, .!@#$%^&*()_]*]{3,25}$/",

すべての英数字と特殊文字を受け入れますが、特殊文字のみは受け入れられません。

問題は長さチェックにあります:(

次のようになるはずです

Valid: aaaaaaaaa 
Valid: 111111111
Valid: 11111n11111
Valid: nnnn1jkhuig
InValid: @@@@@@@@

しかし、それはエラーを投げています

aaaaaaaaaaaa

同じように

4

4 に答える 4

4
^(?=.*[A-Za-z0-9])[A-Za-z0-9, .!@#$%^&*()_]{6,25}$

PHPでテスト済み)。説明:

  • [A-Za-z0-9, .!@#$%^&*()_]文字列は6 ~ 25 文字で一致する必要があります
  • 文字列のどこか[A-Za-z0-9]に存在する必要があります (文字列が特殊文字のみで構成されていないことを確認します)。
于 2011-09-12T11:23:59.510 に答える
3

これを解決するには、ゼロ幅の正のアサーションを使用できます。これが正規表現です。以下で分解します。

/(?=.*[A-Za-z0-9])[A-Za-z0-9, .!@#$%^&*()_]{3,25}/

最初のコンポーネントは(?=.*[A-Za-z0-9]). コンストラクト(?=...)はゼロ幅のアサーションです。つまり、何かをチェックしますが、出力を「食べる」ことはありません。「...」の部分が一致する場合、アサーションは成功し、正規表現が続行されます。一致しない場合、アサーションは失敗し、正規表現は一致しないとして返されます。この場合、「...」は「.*[A-Za-z0-9]」であり、「英数字がどこかに存在することを確認してください。どこにあるかは気にしません」と言っているだけです。

次のコンポーネントは[A-Za-z0-9, .!@#$%^&*()_]{3,25}、有効な文字列のうち 3 ~ 25 文字に一致することを示しています。肯定先読みアサーションにより、それらの少なくとも 1 つが英数字であることはすでにわかっているので、これで十分です。

于 2011-09-12T11:24:54.737 に答える
1

文字クラスをネストすることはできませんが、あなたの意図は

/^([A-Za-z0-9]+[A-Za-z0-9, .!@#$%^&*()_]*){3,25}$/

ただし、量指定子{3,25}もネストできないため、これも機能しません。

代わりにこれを試してください

^(?=.{3,25})[A-Za-z0-9]+[A-Za-z0-9, .!@#$%^&*()_]*$

(?=.{3,25})長さの要件を確実にする先読みです。

于 2011-09-12T11:23:26.253 に答える
0

あなたの正規表現は少し奇妙だと思います。セットをセット内に囲んでいます。

/^([A-Za-z0-9]+[A-Za-z0-9, .!@#$%^&*()_]*){3,25}$/数値を定義するには、括弧のようなものにする必要があります。

于 2011-09-12T11:18:59.957 に答える