是的,使用正则表达式验证一个字符后跟另一个字符

yup validation one character followed by other character using regular expression

我需要一些是的电子邮件验证规则来显示一些自定义消息。

  1. 如果我们没有得到 @ 后跟 .
  2. ,则无效

到目前为止我尝试过的: yup.string().email().matches(/^(?!\@*.)/)


  1. 无效,如果我们得到 @ 后跟 ,

到目前为止我尝试过的: yup.string().email().matches(/^(?!\@*,)/)

None 个我尝试过的解决方案。

一种方法是编写不同的模式以产生不同的自定义消息。

例如,此模式匹配@

之后的逗号
^[^@\s]+@[^@\s,]*,

说明

  • ^ 字符串开头
  • [^@\s]+ 匹配除空白字符或@
  • 以外的 1+ 个字符
  • @字面匹配
  • [^@\s,]*, 匹配除空白字符或 @ 之外的可选字符,然后匹配逗号

此模式与类似电子邮件的格式相匹配。它也可以匹配逗号,但已经检查了该模式特定的模式。

^[^\s@]+@[^\s@]+\.[^\s@]+$

const getMessage = s => {
  if (s.startsWith("@")) {
    return `${s} -->Invalid, string starts with @`;
  }
  if (/^[^@\s]+$/.test(s)) {
    return `${s} --> Invalid, string does not contain @`;
  }
  if (/^[^@\s]+@[^@\s,]*,/.test(s)) {
    return `${s} --> Invalid, string has , after @`;
  }
  if (/^[^@\s]+@[^@\s.]+$/.test(s)) {
    return `${s} --> Invalid, string has no . after @`;
  }
  if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(s)) {
    return `${s} --> Valid format`;
  }
  return `${s} --> Invalid format`;
};
[
  "@test.com",
  "abc@gmailcom",
  "def.com",
  "abc@gmail,com",
  "test@test.com",
  "test@@"
].forEach(s => console.log(getMessage(s)));

您可以使用

yup.string().email().matches(/@[^.]*\./)

yup.string().email().matches(/^(?!.*@[^,]*,)/)

这两个正则表达式匹配

  • @[^.]*\. - 一个 @ 字符,然后是 . 以外的零个或多个字符,然后是一个 . 字符(即必须有一个 @ 然后在找到的 @ char)
  • 右边必须有一个 .
  • ^(?!.*@[^,]*,) - 字符串的开头 (^),然后是匹配失败的否定前瞻 ((?!...)),如果紧挨着当前位置的右侧,有是除换行符之外的任何零个或多个字符(.*),然后是 @,然后是零个或多个 non-comma 个字符([^,]*),然后一个逗号。因此,基本上,匹配不包含后跟逗号的 @ 的字符串。