2017-11-15 11 views
1

入力フィールドでフロントエンドのパスワード検証に使用しているJavaScript正規表現があります。正規表現は、文字列を探していることを
JavaScriptの正規表現はfalseを返しますが、正規表現のテスターはtrueを返します

<input type='password' placeholder='Password...' id='password' pattern='^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[[email protected]#\$%\^&\*])(?=.{8,})' required> 

:8文字以上を、大文字、小文字、数字、および特殊文字をここに私の入力フィールドがどのように見えるかです。文字列を取ってみましょう:November2017!例えば。それは正規表現を渡す必要がありますが、私のWebアプリケーションではありません。入力フィールド^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[[email protected]#\$%\^&\*])(?=.{8,})の正規表現をコピー&ペーストしてregex101.comに入力すると、その文字列は検証にパスします。しかし、それは私のwebappで検証をパスしません。 patternアトリビュートに入れても、バリデーションに合格するかどうかは変わってくるのでしょうか?

+0

正規表現は100%標準化されていません。正規表現テスターはJavaScriptの正規表現に設定されていますか? –

+0

@ Gry-はい、JavaScript正規表現 –

+0

で確認しました。完全な文字列と一致するためには 'pattern'が必要です。あなたのパターンは、完全な文字列https://regex101.com/r/WcqXSR/1と一致しません。文字列の先頭の位置にのみ一致します。 – zerkms

答えて

2

最後に.{8,}を追加する必要があります。

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[[email protected]#\$%\^&\*]).{8,} 

patternは完全な文字列に一致しなければならないので、それが起こると、あなたの現在の表現は、文字列の先頭にマッチします。