Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何验证“验证”&引用;在电子邮件地址中?_Regex_Forms_Validation - Fatal编程技术网

Regex 如何验证“验证”&引用;在电子邮件地址中?

Regex 如何验证“验证”&引用;在电子邮件地址中?,regex,forms,validation,Regex,Forms,Validation,我使用以下方法验证表单中的电子邮件地址 -(BOOL) validEmailAddress:(NSString*) emailString { NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}$"; NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSReg

我使用以下方法验证表单中的电子邮件地址

 -(BOOL) validEmailAddress:(NSString*) emailString {
    NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}$";
    NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];
    NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
    if (regExMatches == 0) 
        return NO; // email invalid
     else
        return YES; // email valid 
  }
这很好用,但如果用户发送的电子邮件是“abc@xyz“(没有像.com或.org这样的超级域名)

我很确定这个问题与我的正则表达式中的“.”有关。我试着这样逃避

NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$";
但这也不行。有什么建议吗


编辑:最初发布问题时,我没有在最后一点之前加入转义。对不起。

你必须避开最后一个点。因此,您的表达式如下所示:

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
但是,由于目标C也将
\
解释为转义字符,因此必须转义它。这在目标C中通过使用双反斜杠(
\\
)实现


在上一个示例中,我没有看到转义序列。尝试:

NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$";

你需要逃离这个点,是的

接受“abc@xyz“,您还需要将点及其后的所有内容设置为可选。您可以通过将其封装在括号中并在其后添加问号来完成此操作,如:

^[A-Z0-9._%+-]+@[A-Z0-9.-]+(\.[A-Z]{2,4})?$

你说的故障是什么意思?你的功能是否考虑<代码>abc@xyz有效的电子邮件地址?如果是这样,那很好,因为
abc@xyz
是一个有效的电子邮件地址。您可能需要查看一些关于使用常规表达式验证电子邮件的其他提示,以及有效顶层的列表Domains@Oswald是的,这就是我的意思。你的意思是说没有超级域名(如.com等)的电子邮件地址是有效的吗?@Justin-NicholasY.Toyama没有二级域名的电子邮件地址确实是可能的。您可以区分两个方面:1)电子邮件地址在语法上是否有效。这比看起来更难,我看到正则表达式占据了整个页面。2) 是与电子邮件地址关联的收件箱。如果不发送电子邮件,并希望接收服务器足够好,如果不发送跳转,则无法执行此操作。我尝试了一个反斜杠,但它不起作用,而且编译器抱怨它不是可识别的转义序列。所以你必须避开圆点和反斜杠???我现在正在尝试。@Justin-NicholasY.Toyama是的,正则表达式有一个奇怪的怪癖。由于\是一个可能要包含在正则表达式中的字符,因此必须将其加倍以指示它是转义序列。\。表示“斜杠后跟任何字符”(因为.是通配符),而\\。意思是一个字面上的点。谢谢你,比尔。你的解决方案对我的目标来说是令人满意的。我试过了。这不管用。虽然我不知道为什么,但蜥蜴比尔的代码是有效的。实际的正则表达式只有一个反斜杠。然而,
\
在Objective C中也被解释为转义字符,并且需要在那里转义,从而使您得到其中的两个字符。如果@Oswald的注释是正确的,那么这是一个很好的实现,如果它起作用的话。我去看看。谢谢。@Justin-NicholasY.Toyama只是为了增加一点复杂性,如果您试图接受任何有效的电子邮件地址,这还远远不够详尽,正如维基百科的
^[A-Z0-9._%+-]+@[A-Z0-9.-]+(\.[A-Z]{2,4})?$