ユーザーにメールアドレスの入力を求める HTML フォームがあります。メールの形式が first.last@example.com の場合のみ、続行/フォームを送信できます。
「最初」と「最後」は何でもかまいませんが、「.」が必要です。途中で、「@example.com」で終わる必要があります。そのために使用できる正規表現を誰か教えてもらえますか?
このようなものが機能するはずです。
r'^([^@.]+)\.([^@.]+)@example\.com$'
^
文字列の先頭に一致します。$
終わりに一致します。^...$
ように見えることを確認します。のようなものは一致しません。foo.bar@example.comasdfg
[^@.]+
@
またはではない連続した文字のシーケンスに一致します.
。非正規表現ソリューションは次のようになります。
def validate_email(email):
if not email.endswith('@example.com'):
return False
chunks = email.split('.')
return len(chunks) == 3 and all(chunks)
正規表現は必要ありません。次を使用できます。
def email_validator(email):
if not email.endswith('@example.com'):
return False
if not email[:-12].count('.') == 1:
return False
return True
編集:@ John Y、@manu-fattoからの提案で修正
私は提案しr'^(\w*?)\.(\w*?)@example\.com$'
ます。これは Blender の回答と同じですが、「最初」と「最後」の内容を、大文字と小文字、数字、およびアンダースコア ( _
) を含む「単語」文字に制限する点が異なります。など、より多くの文字を許可したい場合は、以下の代替バージョンで-
を置き換えることで実行できます。@
r'^([\w@]*?)\.([\w@]*?)@example\.com$'
たとえば、 と を許可する場合は、次-
のよう&
になります。
r'^([\w&\-]*?)\.([\w&\-]*?)@example\.com$'
( の前のバックスラッシュは、文字クラス内で特別な意味を持つ-
ためです。)-
私はお勧めし^(.+?)\.(.+?)@example\.com$
ます。部分とは、最初の部分の.+?
前後に何かがなければならないことを意味します。.