2017-11-10 11 views
2

私は、python 2.7.12とpymongo 2.8.1、django 1.11.7、mongoengine 0.9.0とmongodb 3.4.10を使用します。 通常のmongodbコレクションにドキュメントを挿入するカスタムユーザーモデルを作成しています。 mongoengineから 'Document'クラスを継承し、文字列のパスワードフィールドを作成しました。私は、以下の条件のための正規表現パターンを作成しようとしてきた:mongoengine 0.9.0の正規表現パターンを設定していますStringField

  • 長さ:8-25文字
  • 少なくとも1大文字
  • 少なくとも1つの小文字
  • 少なくとも1つの数
  • 少なくとも1特殊文字

私は次のようにre.compile()を使用してみました:

import re 
regexp = re.compile('[[email protected]#$%^&+=]', max_length=25, min_length=8) 
password = StringField(regex=regexp) 

無効なパスワードでHTTP POSTリクエストを送信しましたが、長さが8より小さいか25より大きい場合にのみエラーが発生します。 mongoengineが新しく、正規表現パラメータにどのような入力が必要か、StringFieldのサンプルを見つけることができませんでした。だから私は何が間違っているの?

+0

あなたは「1点の数、1つの小文字、1アッパーケース1特別な)を持っている必要があります」のための条件が欠けている - あなたは先読みしてそれをモデル化することができます。 '(?= [az])(?= [az])のようなsmthが必要な場合は、https://docs.python.org/2/library/re.htmlの'? (?= [0-9])(?= [@#$%^&+ =])[A-Za-z0-9 @#$%^&+ =] *} –

+1

これはおそらくあなたを助けることができます:https ://stackoverflow.com/questions/1559751/regex-to-make-sure-that-the-string-contains-at-least-one-lower-case-char-upper – Georgy

+0

また、[Django Regex Validator ](https://docs.djangoproject.com/en/1.11/ref/validators/#regexvalidator) – Sheshnath

答えて

2
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[@#$%^&+=]).{8,25}$ 

あなたはthis.Each条件は、あなたがしたい場合lookahead.Add以上の特殊文字を使用して追加されて試すことができます。

See demo.