【问题标题】:How to validate phone number and email in aws lex code hook(in lambda)如何在 aws lex 代码挂钩中验证电话号码和电子邮件(在 lambda 中)
【发布时间】:2017-08-24 11:53:58
【问题描述】:

如何在 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'
                                       )

【问题讨论】:

    标签: python amazon-web-services aws-lambda chatbot amazon-lex


    【解决方案1】:

    首先,您需要修正一些格式。遵循指南 here 将有助于您提高代码的可读性,以供您自己以及您需要帮助或以后需要维护代码的其他人使用。

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

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

    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'
            )
    

    【讨论】:

    • 当我在 DialogCodeHook 验证中为 lex bot 使用此代码时,它会在聊天机器人测试中显示此代码。(发生错误:无效的 Lambda 响应:收到来自 Lambda 的错误响应:未处理)
    猜你喜欢
    • 2018-05-05
    • 2020-08-17
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    相关资源
    最近更新 更多