我有一个 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)
我会建议^(.+?)\.(.+?)@example\.com$
。该部分意味着在第一部分.+?
之前和之后必须有一些东西。.
我建议r'^(\w*?)\.(\w*?)@example\.com$'
。这与 Blender 的答案相同,只是它将“first”和“last”的内容限制为“word”字符,包括大小写字母、数字和下划线 ( _
)。如果您想允许更多字符,例如-
,您可以通过替换@
以下替代版本中的 来实现:
r'^([\w@]*?)\.([\w@]*?)@example\.com$'
例如,如果您想允许-
and &
,它将是:
r'^([\w&\-]*?)\.([\w&\-]*?)@example\.com$'
(前面的反斜杠-
是因为-
在字符类中具有特殊含义。)
您不需要正则表达式,您可以使用:
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 的建议