正则表达式不允许在电子邮件末尾添加空格

时间:2017-12-29 10:12:28

标签: regex validation email

我正在尝试接受一封电子邮件,但最后没有空白或空白。 我试过两个变种

  

图案= “^ [A-ZA-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] + [AZ] {1,4} [^ \ S] + $” >

     

图案= “^ [A-ZA-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] + [AZ] {1,4} \ S $。” >

两者都不起作用&输入在最后接受空格。我的完整输入行是

  

input type =“email”id =“guestUserEmail”name =“guestEmail”data-pattern-error =“电子邮件无效”data-required-error =“请输入电子邮件地址”required pattern =“^ [A- ZA-Z0-9 ._%+ - 。] + @ [A-Z0-9 .-] + [AZ] {1,4} $“

我提到了这个答案regex for no whitespace at the begining and at the end but allow in the middle

请建议!

5 个答案:

答案 0 :(得分:1)

Java转义序列不会考虑$(document).ready(function() { value = 1; $('#radio').click(function() { valuePicker("#valuePicker", $('#radio2').is(':checked') ? 5 : 1); }); valuePicker("#valuePicker", value); }); ,您必须再添加一个斜杠,例如\

修改你的String模式,就像这样

\\

这将解决,

答案 1 :(得分:0)

更新

默认情况下,HTML会折叠空格。这意味着:

  • 如果字符之间有多个空格,它将呈现为单个空白字符。

    • ex。this string has a double space right here .
      将呈现为:
      this string has a double space right here .
  • 剥离前导和尾随空格(这不会发生在字符串中,因此需要trim()等方法

    • 离。 abc123@email.com   将呈现为:
      abc123@email.com

因此,如果您在电子邮件地址后面有十亿个空格,那么它将自动在<input>中删除。 Demo将<input>包裹在<form>中,表单实际上会将数据发送到真实的测试服务器。如果您发送带有尾随空格的有效电子邮件地址,请查看响应。您将在响应中看到该值没有尾随空格。

<小时/> 你有没有考虑过逃避这些时期?

.表示 ANY 一个字符

\.表示点或句号

看起来这样有效:

[A-Za-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{1,4}\S$

请参阅RegEx101

上的测试

<小时/>

演示

input {
  font: inherit
}
<form id='contact' action='https://httpbin.org/post' method='post'>
  <input type="email" id="guestEmail" name="guestEmail" pattern="^[A-Za-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{1,4}$" required placeholder='abc123@email.com'>
  <input type='submit'>
</form>

答案 2 :(得分:0)

我认为你的正则表达没问题:

https://regex101.com/r/j0MXV5/1

https://regex101.com/r/oN9v8U/1

也许可以选择使用blur 并修剪前导空格和尾随空格:

onblur="this.value=this.value.trim();

或只有尾随空格:

onblur="this.value=this.value.replace(/\s+$/, '');

<form>
    <input type="email" id="guestUserEmail" name="guestEmail" data-pattern-error="Email is invalid" data-required-error="Please enter email address" required pattern="^[A-Za-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{1,4}[^\\S]+$" onblur="this.value=this.value.replace(/\s+$/, '');">
</form>

答案 3 :(得分:0)

您使用的是input类型的email字段。此元素的defined and documented behavior接受但删除任何前导或尾随空格。如果这不可接受,请不要使用此元素。

您尝试&#34;修复&#34;正则表达式是错误的。基本的正则表达式阅读技巧应该告诉你,明显的原始正则表达式只允许字符串在字符串结束之前。你的尝试基本上会从#34;几乎是正确的电子邮件&#34;至少几乎是正确的电子邮件,其次是任何垃圾邮件,只要它不是空白&#34;。

一般来说,你通过更多地限制它来修复一个过于宽容的正则表达式(删除它之前接受的一些东西,也许在整个过程中重构正则表达式;例如,只允许域部分中的内部破折号,你必须将它分成第一个字符,可选中间可能带有破折号,稍微不那么可选的最后一个字符,没有破折号)但肯定不是通过添加新的匹配可能性 - 特别是不是重复任意次数的广泛通用字符类。

正如评论中已经指出的那样,没有办法将每个有效的电子邮件地址与正则表达式完全匹配,但HTML5中的常规内置验证几乎可以保证比你在某些地方找到的随机正则表达式做得更好。 PHP论坛。

答案 4 :(得分:0)

使用这个正则表达式。 它将验证您的电子邮件在电子邮件 ID 的开头或结尾是否有空格

^([^\S/.]{0,})+(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})+([^\S/.]{0,})$