1

如何在 AWS Lex 代码挂钩(在 Lambda 中)中验证电话号码和电子邮件。

我曾尝试使用以下代码来验证 AWS Lex 聊天机器人中的电话号码和电子邮件地址。我收到错误。

import re
EMAIL_REGEX = re.compile(r"[^@]+@[^@]+\.[^@]+")

if len(str(phonenumber)) <= 10 or len(str(phonenumber)) >= 10:
       return build_validation_result(False,
                                       'PhoneNumber',
                                      'Please enter valid phone number which contains 10 digits'
                                       )
    if not EMAIL_REGEX.match(email):
        return build_validation_result(False,
                                       'Email',
                                       'Please enter valid email address'
                                       )
4

1 回答 1

0

首先,您需要修复一些格式。遵循此处的指南将很好地为您自己和其他需要帮助或需要稍后维护代码的人提高代码的可读性。

其次,我假设您在这里省略了绝大多数代码,并且缩进中的一些错误来自粘贴到 stackoverflow 的问题。我已经修复了这些错误,但是如果您遗漏了有关与 aws api 交互的其他重要信息,那么在您发布代码并最好是完整追溯您的错误之前,没有人可以帮助您。

不是每个人都同意我的观点,但除非您是正则表达式专家,否则通常最好复制大师制作的正则表达式并对其进行彻底测试以验证它是否会产生您想要的结果,而不是自己制作。我在下面使用的正则表达式是从这里复制的。我已经用我拥有的一长串有效电子邮件对其进行了测试,并且没有一个不匹配。

import re

PHONE_REGEX = re.compile(r'[0-9]{10}')

EMAIL_REGEX = re.compile(r"""(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#'$"""+
    r"""%&*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d"""+
    r"""-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*"""+
    r"""[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4]["""+
    r"""0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|["""+
    r"""a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|"""+
    r"""\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])""")

if not PHONE_REGEX.match(phonenumber):
    return build_validation_result(
        False,
        'PhoneNumber',
        'Please enter valid phone number which contains 10 digits'
        )

if not EMAIL_REGEX.match(email):
    return build_validation_result(
        False,
        'Email',
        'Please enter valid email address'
        )
于 2017-08-24T13:38:40.797 回答