在表单域中使用多个模式

时间:2017-08-28 14:12:50

标签: regex html5 forms validation email

我正在尝试创建一个电子邮件表单字段,要求用户以hello@domain.ext格式输入电子邮件,但也只允许商业电子邮件通过(没有gmail,yahoo,hotmail等)< / p>

我创建了两个独立工作的字段模式,但我似乎无法让它们一起工作。

需要hello@domain.ext格式

pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$"

不允许这些免费电子邮件域名。仅限商业电子邮件。

pattern="^(?!.*@(?:live|gmx|yahoo|outlook|msn|icloud|facebook|aol|zoho|yandex|lycox|inbox|myway|aim|goowy|juno|(?:hot|[gy]|google|short|at|proton|hush|lycos|fast)?mail)\.\w+$).*$"

这是我的表单代码:

    <form  method="POST" action="#">

    <input type=hidden name="oid" value="00D70000000KCoG">
    <input type=hidden name="retURL" 
    value="#">

    <label for="email">Email</label><input id="email" maxlength="80" 
    name="email" size="30" type="email" 
    oninvalid="setCustomValidity('Please enter your business email here.')" 
    onchange="try{setCustomValidity('')}catch(e){}" pattern="[a-z0-
    9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" required />

    <input type="submit" name="submit" value="Submit">
    </form>

1 个答案:

答案 0 :(得分:1)

以下是两种模式的组合:

pattern="[a-z0-9._%+-]+@(?!(?:live|gmx|yahoo|outlook|msn|icloud|facebook|aol|zoho|yandex|lycox|inbox|myway|aim|goowy|juno|(?:hot|[gy]|google|short|at|proton|hush|lycos|fast)?mail)\.\w+$)[a-z0-9.-]+\.[a-z]{2,4}"

请注意,开头的^和结尾的$不是必需的,因为它们隐含在那里:pattern值包含^(?:和{{1匹配整个输入值。

请参阅regex demo

<强>详情

  • )$ - 隐式 - 开始字符串
  • ^ - 一个或多个字母,数字,[a-z0-9._%+-]+._%+
  • - - @
  • @ - 如果模式立即匹配到当前位置的右侧(即(?!(?:live|gmx|yahoo|outlook|msn|icloud|facebook|aol|zoho|yandex|lycox|inbox|myway|aim|goowy|juno|(?:hot|[gy]|google|short|at|proton|hush|lycos|fast)?mail)\.\w+$)之后)
  • ,则表示匹配失败
  • @ - 1个小写ASCII字母,数字,[a-z0-9.-]+或/和.
  • - - 一个点
  • \. - 2到4个小写ASCII字母。

注意:您可能希望将[a-z]{2,4}添加到角色类:A-Z =&gt; [a-z0-9._%+-]+[\w.%+-]+ =&gt; [a-z0-9.-]+