regex yup使用正则表达式验证一个字符后接其他字符

avkwfej4  于 2023-04-22  发布在  其他
关注(0)|答案(3)|浏览(137)

我需要一些是的电子邮件验证规则来显示一些自定义消息。
1.如果我们没有得到@后跟.,则无效

  • abc@gmailcom(无效)
  • def.com(无效)

到目前为止我尝试过的:yup.string().email().matches(/^(?!\@*.)/)
1.如果我们得到@后跟,则无效

  • abc@gmail,com(无效)

到目前为止我尝试过的:yup.string().email().matches(/^(?!\@*,)/)
我试过的解决办法都没有成功。

wfveoks0

wfveoks01#

你可以用

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

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

这两个正则表达式匹配

  • @[^.]*\.-一个@字符,然后是零个或多个除.以外的字符,然后是一个.字符(即在某个地方必须有一个@,然后在找到的@字符的右边必须有一个.
  • ^(?!.*@[^,]*,)-字符串的开头(^),然后是负前瞻((?!...)),如果紧靠当前位置的右侧存在除尽可能多的换行符字符以外的零个或更多字符,则匹配失败(.*),然后是一个@,然后是零个或多个非逗号字符([^,]*),然后是一个逗号。所以,基本上,匹配一个不包含@的字符串,后面跟着一个逗号。
b1uwtaje

b1uwtaje2#

一种方法是编写不同的模式来生成不同的自定义消息。
例如,此模式匹配@后面的逗号

^[^@\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)));
txu3uszq

txu3uszq3#

我只是跟着这个,为我工作。
https://github.com/jquense/yup/issues/507#issuecomment-765799429

const emailRegex = new RegExp(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)

yup.string().trim().required("Required").email("Invalid email").matches(emailRegex,"Invalid email"),

相关问题