【问题标题】:Regex not contain at end and start differents string [duplicate]正则表达式不包含结尾和开头不同的字符串[重复]
【发布时间】:2020-02-14 16:45:02
【问题描述】:

我只想使用开头不包含“xxx-”和结尾不包含“@test.com”的邮件地址。

这是我的代码:

->where('email', 'regexp', "/^((?!@test.com).)*$/i")

这里我只接收结尾不包含“test.com”的电子邮件。 我也不想接收以“xxx-”开头的电子邮件。有人知道怎么做吗 ? 谢谢!

【问题讨论】:

  • 您能否澄清/确认您是否确实意味着“开头不包含'xxx-'结尾'@test.com'”或者如果您的意思是“开头不包含'xxx-'结尾不包含'@test.com'”?
  • 使用^(?!xxx-)(?!.*@test\.com$).*

标签: php regex laravel eloquent


【解决方案1】:

您可以将此正则表达式与 2 个否定的前瞻性断言(规则)一起使用:

^(?!xxx-)(?![^@]+@test\.com$)[^@]+@[^@]+$

RegEx Demo

正则表达式详细信息:

  • ^:开始
  • (?!xxx-):不允许电子邮件以xxx- 开头
  • (?![^@]+@test\.com$):不允许电子邮件以test.com 结尾
  • [^@]+@[^@]+:匹配一封必须只有一个@的电子邮件
  • $:结束

【讨论】:

  • 看起来它与第一个示例不匹配,您需要接受这两个前瞻断言之间的任何字符:^(?!xxx-).+(?!@test\.com$)regex101.com/r/3mET7i/2
  • 已经匹配第一个了。请参阅我的演示中的绿色 1 match。由于宽度为零,因此未突出显示。将其更改为^(?!xxx-)(?!@test\.com$).+
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2013-07-20
  • 2017-09-17
  • 1970-01-01
相关资源
最近更新 更多