正则表达式在特定的地方没有特殊的字符

时间:2011-01-19 20:34:02

标签: regex

现在我有:

(?!.*([._-])\1)(?=.*@)[\w.@-]+

找到test@foo

我想这样做test无法以特殊字符开头或结尾。

例如,我希望它能找到:

  • tes-t@foo
  • test@-foo

但不是:

  • -test@foo
  • test-@foo
  • -test-@foo

2 个答案:

答案 0 :(得分:0)

您可以使用^定义不包含特定字符的字符类,例如[^a]会将{em>分开与a匹配。

我会将匹配前@字的正则表达式分成三个部分;一个匹配前导字符,一个匹配中间,一个匹配最后一个字符。你还需要处理只有单个字符的pre-@字的特殊情况。

答案 1 :(得分:0)

这不是你应该重新创建方向盘的区域:错误太多了。

我不确定你真正想做什么。像president@whitehouse.gov和普通的postmaster这样的地址可能都是可交付的,但不太可能做到你想要的。

唯一验证邮件地址的合理方法是将邮件发送到该地址并返回一个非自动回复,表明它是另一端的正确人。但这不能实时完成。这意味着你能做的最好的事情是让他们输入两次以试图清除错别字。真的,这没什么帮助。这就是为什么通过网络注册某些内容总是涉及协商握手。

但是,如果您只需要验证符合RFC 5322的地址,则可以使用this pattern

请理解,测试一个符合RFC的地址绝不应该与验证该邮件地址相混淆 - 这完全是另一回事。