如何使用正则表达式和 CSML 验证电子邮件地址

How to verify email address with regex and CSML

我想验证向我的聊天机器人提供信息的用户的电子邮件地址。 有没有一种简单的方法可以用正则表达式和 CSML 来拒绝意外符号?

这是我当前的代码:

askEmail:
say "Thank you {{firstname}}"
say "What is your email address?"
hold
remember email = event
if (Find("@", in="email")) goto askCompany
else {
say "Please enter a real email address"
goto askEmail
}

我需要用使用正则表达式的函数替换 Find 并检查所有意外符号。

emailPattern = /^([a-z\d]{1})([\w-\.!#$%&'*+\/=?\^`\{\|\}~"\(\),:;<>\[\\]]){2,}([a-z\d]{1})@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-z\-0-9]+\.)+[a-z]{2,}))$/i;

console.log('Regex test is: ', emailPattern.test('test@test.test'));

emailPattern = /^([a-z\d]{1})([\w-\.!#$%&'*+\/=?\^`\{\|\}~"\(\),:;<>\[\\]]){2,}([a-z\d]{1})@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-z\-0-9]+\.)+[a-z]{2,}))$/i;

电子邮件正则表达式模式

^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)* @[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$;

有一个 contains_regex string method in CSML 可以用来验证比仅仅“此字符串中是否有 @?”更复杂的规则。

很难用正则表达式涵盖所有可能的有效电子邮件地址(参见 https://emailregex.com),但为了您的目的,我们同意电子邮件采用 "whatever@whatever.whatever" 的一般形式,其中 "whatever" 是不包含任何换行符的任何字符串。

这显然不是 100% 万无一失的正则表达式,因为它有点幼稚,但验证电子邮件仍然是一件 Hard Thing®。足够好通常就足够了。

这里是:

askEmail:
  say "Thank you {{firstname}}"
  say "What is your email address?"
  hold
  remember email = event
  if (email.contains_regex("^.+@.+\..+$")) goto askCompany
  else {
    say "Please enter a real email address"
    goto askEmail
  }

您显然可以根据自己的喜好调整正则表达式!