Python 如何在aws lex代码钩子(lambda)中验证电话号码和电子邮件

Python 如何在aws lex代码钩子(lambda)中验证电话号码和电子邮件,python,amazon-web-services,aws-lambda,chatbot,amazon-lex,Python,Amazon Web Services,Aws Lambda,Chatbot,Amazon Lex,如何在AWS Lex code hook(Lambda)中验证电话号码和电子邮件 我尝试使用以下代码验证AWS Lex chatbot中的电话号码和电子邮件地址。我有错误 import re EMAIL_REGEX = re.compile(r"[^@]+@[^@]+\.[^@]+") if len(str(phonenumber)) <= 10 or len(str(phonenumber)) >= 10: return build_validation_resul

如何在AWS Lex code hook(Lambda)中验证电话号码和电子邮件

我尝试使用以下代码验证AWS Lex chatbot中的电话号码和电子邮件地址。我有错误

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'
                                       )
重新导入
电子邮件\u REGEX=re.compile(r“[^@]+@[^@]+\.[^@]+”)
如果len(str(phonenumber))=10:
返回生成验证结果(False,
“电话号码”,
'请输入包含10位数字的有效电话号码'
)
如果没有电子邮件\u REGEX.match(电子邮件):
返回生成验证结果(False,
“电子邮件”,
'请输入有效的电子邮件地址'
)

首先,您需要修复一些格式设置。遵循本指南将很好地帮助您提高代码的可读性,无论是对于您自己还是您需要帮助或以后需要维护代码的其他人

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

并非所有人都同意我的观点,但除非你是正则表达式专家,否则最好复制gurus制作的正则表达式,并对其进行彻底测试,以验证它是否能产生你想要的结果,而不是自己制作。我在下面使用的正则表达式是从中复制的。我已经用一长串我收到的有效邮件测试过了,没有一封邮件不匹配

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

首先,您需要修复一些格式设置。遵循本指南将很好地帮助您提高代码的可读性,无论是对于您自己还是您需要帮助或以后需要维护代码的其他人

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

并非所有人都同意我的观点,但除非你是正则表达式专家,否则最好复制gurus制作的正则表达式,并对其进行彻底测试,以验证它是否能产生你想要的结果,而不是自己制作。我在下面使用的正则表达式是从中复制的。我已经用一长串我收到的有效邮件测试过了,没有一封邮件不匹配

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

当iam在lex bot的DialogCodeHook验证中使用此代码时,它会在chatbot测试中显示此代码。(发生错误:无效Lambda响应:收到来自Lambda的错误响应:未处理)。当iam在lex bot的DialogCodeHook验证中使用此代码时,它会在chatbot测试中显示此代码。(发生错误:Lambda响应无效:从Lambda接收到错误响应:未处理)