验证正则表达式中的多个条件

rpk*_*rpk 2 regex regex-negation regex-lookarounds

我或多或少是一个正则表达式的新手.我试图将以下条件变为正则表达式:

  • 在字符串的开头和结尾没有空格
  • 允许所有数字
  • 允许空格,点,括号,加号和减号

导致以下正则表达式:

^\S[\d\/. ()\-+]*\S$
Run Code Online (Sandbox Code Playgroud)

但现在我尝试应用另外两个条件:

  • 只允许一两个+
  • 只允许一个(和一个)

我的问题是如何将这两个条件合并到现有的正则表达字符串上面cuz排除+ [+]{1,2}和()[(]{1} [)]{1}没有多大意义因为我尝试以无特定顺序制作一般语句,以便我能够链接它.谢谢拉尔夫

zx8*_*x81 6

用这个:

^(?=\S)(?=(?:[^+]*\+){0,2}[^+]*$)(?=(?:[^(]*\()?[^(]*$)(?=(?:[^)]*\))?[^)]*$)[- .()+0-9]*[-.+()0-9]$
Run Code Online (Sandbox Code Playgroud)

正则表达式演示中,您可以使用输入来检查匹配和不匹配的内容.

说明

  • ^锚断言,我们是在字符串的开头
  • 前瞻(?=\S)断言,接下来是非空格字符
  • Lookahead (?=(?:[^+]*\+){0,2}[^+]*$):+最多两个字符
  • Lookahead (?=(?:[^(]*\()?[^(]*$):(最多一个
  • Lookahead (?=(?:[^)]*\))?[^)]*$):)最多一个
  • [- .()+0-9]* 零个或多个允许的字符
  • [-.+()0-9] 以允许的一个不是空格的字符结束
  • $锚断言,我们是在字符串的结束

参考

  • 我建议您从参考部分的第二篇文章开始,因为这样的解释步伐要舒适得多。技术是相同的-这类似于密码验证正则表达式。 (2认同)