Regex。排除字符组合,限制Regex中的某些字符(部分工作)。

问题描述 投票:0回答:1

我试图使用jQuery中的Regex来验证一个电子邮件输入--只针对以下条件。

我想允许的输入。

  • 小写字母(多个
  • 位数
  • 点号
  • 破折号
  • @号

我想防止的输入。

  • 字符串开头的点号、破折号、@号。
  • 句号、破折号、@号在字符串末尾的位置
  • 双点句号
  • 句号和破折号

到目前为止,我想出了下面的方法,但我在排除两个符号的组合和限制@符号只能是一个符号方面遇到了问题。

谁能告诉我怎么做才对?

注意:我只是在寻找基本的验证方法。 我只想找一个基本的验证方式,只对英文字母进行验证(其他的我都用jQuery覆盖)。

我的Regex。

var val = $(this).val();
var checkEmail = /(?!^[@.-])(?!.*@@)(?!.*\.\.)(?!.*--)(?!.*[@.-]$)[0-9a-z@\.\-]/g;

if(val.match(checkEmail) {
   console.log('input valid');
   } else {
   console.log('input invalid');
}

非常感谢,Tom

jquery regex regex-lookarounds regex-group
1个回答
2
投票

你可以使用下面的regex来实现你的结果。

^(?!.+?(?:\.-|\.\.|--|-@|\.@|@\.).+?)[^.-@ ][a-z0-9_.-]+@[a-z0-9_.-]+(?<=[^.-@ ])$

以上regex的解释:

^, $ - 代表测试字符串的开始和结束,也代表测试字符串的开始和结束。

(?!.+?(?:\.-|\.\.|--|-@|\.@|@\.).+?) - 代表 瞻前顾后 如果测试字符串包含连续的 .-, .., --, -@, .@@..

[^.-@ ] - 如果字符串的开头是以下任何一项,则表示负匹配 .-@.

[a-z0-9_.-]+@[a-z0-9_.-]+ - 代表字符集,其中字符串包含上述字符中的任何内容,只有一个"..."。@ 符号。

(?<=[^.-@ ]) - 表示正向的lookbehind,它匹配任何不以 .-@.

你可以找到上述regex的演示。这里。

在JAVASCRIPT(JQUERY)中实现。

var val = "[email protected]";
var checkEmail = /^(?!.+?(?:\.-|\.\.|--|-@|\.@|@\.).+?)[^.-@ ][a-z0-9_.-]+@[a-z0-9_.-]+(?<=[^.-@ ])$/gm;

if (val.match(checkEmail)) {
  console.log('input valid');
} else {
  console.log('input invalid');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.