如何验证 xml 架构中的电子邮件 ID

Posted

技术标签:

【中文标题】如何验证 xml 架构中的电子邮件 ID【英文标题】:How to validate an email id in xml schema 【发布时间】:2011-01-10 00:08:06 【问题描述】:

您好,我创建了一个架构来检查电子邮件 ID。这可以验证电子邮件 ID 是否为 abc@def.com 和 adbc@def.co.in 和 abc@def.co.in.pune 但我只想验证 abc@def.com 和 adbc@def.co.in 因为我认为电子邮件在 @ 符号后最多可以有 2 个点 所以第三个将是无效的电子邮件 ID 那么如何使用模式验证电子邮件ID 下面是架构

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

谢谢 苏尼尔·库马尔·萨胡

【问题讨论】:

because i think email can have maximum 2 dots after @ symbol。也许阅读相关的 RFC 而不是猜测和任意验证失败? abc@10.0.0.0 也是一个完全有效的电子邮件。 davidcel.is/posts/stop-validating-email-addresses-with-regex 【参考方案1】:

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

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

给出的例子如下(我稍微编辑了一下,让事情更清楚一点):

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

【讨论】:

如果你只想要 def.com 和 def.co.in 你应该稍微玩一下这个表达式。【参考方案2】:

您可以使用基于字符串和正则表达式模式的&lt;xs:simpleType&gt; 来验证您的电子邮件地址:

<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

【讨论】:

与其他 RegEx 库不同,XML Schema 模式不以 ^ 开头并以 $ 结尾。这在原子字符串中是隐含的。【参考方案3】:

使用以下架构验证器进行电子邮件 ID 验证

<xsd:simpleType name="emailAddress">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"/>
    </xsd:restriction>
</xsd:simpleType>

【讨论】:

这仅适用于简单的电子邮件地址。【参考方案4】:

将此验证器也用于带有撇号的电子邮件验证:

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

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

【讨论】:

以上是关于如何验证 xml 架构中的电子邮件 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中验证电子邮件ID? [复制]

Laravel身份验证 - 不同表格中的电子邮件

验证 EditText 中的电子邮件 [重复]

.Net mvc4 中的电子邮件验证

电子邮件验证煎茶

如何在不使用java发送任何邮件的情况下检查域中是不是存在电子邮件ID