如何在正则表达式中限制点仅一次或可选



需要一个只有特殊字符点的正则表达式,该字符点应该是可选的或只出现一次。

pattern = /^([A-Za-z.]+)$/;

如果没有更多的信息,我将使用

/^(?!$)[a-z]*.?[a-z]*$/i

负向前看防止空匹配。

在regex101

查看这个演示

以下是一些方法:

  1. 分别处理输入有一个点,周围有可选字母,或没有点(但至少有一个字母):

    /^([a-z]*.[a-z]*|[a-z]+)$/i

  1. 就像你做的那样捕获字母和点,但不允许输入有两个点,使用否定的向前看:

    /^(?!(.*.){2})([a-z.]+)$/i

  2. 捕获可选的字母,然后是可选的点,然后是可选的字母,但禁止空输入,并使用负向前看:

    /^(?!$)([a-z]*.?[a-z]*)$/i

如果在任何情况下点不应该在开始或结束并且不匹配空字符串,您可以从1个或多个字符a-z开始匹配,然后有选择地匹配一个点和1个或多个字符a-z:

/^[a-z]+(?:.[a-z]+)?$/i

Regex演示

最新更新