如何在XML模式中验证电子邮件地址

14

你好,我创建了一个用于检查电子邮件的模式。该模式可以验证电子邮件地址是否为abc@def.com和adbc@def.co.in以及abc@def.co.in.pune。 但是我只想验证abc@def.com和adbc@def.co.in,因为我认为在@符号后面最多可以有两个点。 因此第三个将是无效的电子邮件地址。 那么如何使用这个模式验证电子邮件地址呢? 以下是该模式:

<xsd:element name="SSEM" minOccurs="0">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="CNT" minOccurs="0" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="EM" minOccurs="1" nillable="true" type ="singleEmailID"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

感谢Sunil Kumar Sahoo


1
因为我认为电子邮件在@符号后最多只能有2个点。也许应该阅读相关的RFC,而不是猜测和随意失败验证?abc@10.0.0.0也是一个完全有效的电子邮件地址。http://davidcel.is/posts/stop-validating-email-addresses-with-regex/ - Vsevolod Golovanov
4个回答

33

您需要定义一个匹配有效电子邮件的模式。模式使用正则表达式语法进行定义。一旦您定义了一个简单的类型(基于xs:string),其中包含适当的模式,您就可以将其用于电子邮件类型。

互联网上有几个地方提供了一些这样类型和模式的示例。此处提供了一个电子邮件类型的示例这里

它给出的示例如下(我稍微编辑了一下以使事情更加清晰):

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > 

  <xsd:element name="A" type="emailAddress"/> 

  <xsd:simpleType name="emailAddress"> 
    <xsd:restriction base="xsd:string"> 
      <xsd:pattern value="[^@]+@[^\.]+\..+"/> 
    </xsd:restriction> 
  </xsd:simpleType> 
</xsd:schema>

1
如果你只想要def.com和def.co.in,你应该稍微调整一下这个表达式。 - ahmet alp balkan

7
您可以使用基于字符串和正则表达式模式的<xs:simpleType>来验证您的电子邮件地址:
<xsd:simpleType name="emailAddress">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})"/>
    </xsd:restriction>
</xsd:simpleType>

使用任何您喜欢的电子邮件正则表达式 :-),在RegexLib.Net上可以查看一些示例。

然后,在基本的XML模式中使用该类型:

<xsd:element name="email" type="emailAddress" />

可以通过在线验证器进行检查:https://www.corefiling.com/opensource/schemaValidate.html


6
与其他正则表达式库不同,XML Schema 模式不以 ^ 开头并以 $ 结尾。这在原子字符串中是隐含的。 - Dan McCreary

1
请使用以下模式验证器进行电子邮件地址的验证。
<xsd:simpleType name="emailAddress">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"/>
    </xsd:restriction>
</xsd:simpleType>

这仅适用于简单的电子邮件地址。 - Suncat2000

0

使用此验证器进行带有撇号的电子邮件验证:

<xsd:simpleType name="emailAddress">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="^([0-9a-zA-Z_\.\'\-]+)*@[0-9a-zA-Z\-]+[a-zA-Z\.]+Dollar symbol"/>
    </xsd:restriction>
</xsd:simpleType>

它将作为带撇号的电子邮件验证有效:-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接