正则表达式不允许连续的点字符和更多

时间:2019-05-27 05:18:47

标签: javascript regex

我正在尝试制作一个满足以下条件的JavaScript正则表达式

  1. a-z是可能的
  2. 0-9可能
  3. 破折号,下划线,撇号,句点是可能的
  4. 不能使用&号,括号,逗号和加号
  5. 不能连续使用
  6. 期间不能位于开头和结尾
  7. 最多64个字符

到目前为止,我已经来关注正则表达式

^[^.][a-zA-Z0-9-_\.']+[^.]$

但是,这允许中间连续的点字符,并且不检查长度。 谁能指导我如何添加这两个条件?

3 个答案:

答案 0 :(得分:2)

这是一种似乎可行的模式:

^(?!.*\.\.)[a-zA-Z0-9_'-](?:[a-zA-Z0-9_'.-]{0,62}[a-zA-Z0-9_'-])?$

Demo

以下是正则表达式模式的说明:

^                          from the start of the string
    (?!.*\.\.)             assert that two consecutive dots do not appear anywhere
    [a-zA-Z0-9_'-]         match an initial character (not dot)
    (?:                    do not capture
    [a-zA-Z0-9_'.-]{0,62}  match to 62 characters, including dot
    [a-zA-Z0-9_'-]         ending with a character, excluding dot
     )?                    zero or one time
$                          end of the string

答案 1 :(得分:1)

您可以使用this正则表达式

^(?!^[.])(?!.*[.]$)(?!.*[.]{2})[\w.'-]{1,64}$

正则表达式细分

^ #Start of string
(?!^[.]) #Dot should not be in start
(?!.*[.]$) #Dot should not be in start
(?!.*[.]{2}) #No consecutive two dots
[\w.'-]{1,64} #Match with the character set at least one times and at most 64 times.
$ #End of string

正则表达式中的更正

  • - 不应介于字符类之间。它表示范围。避免在两者之间使用它
  • [a-zA-Z0-9_]等同于\w

答案 2 :(得分:1)

这是我的主意。已使用\w字字符short)。

^(?!.{65})[\w'-]+(?:\.[\w'-]+)*$
  • ^位于start (?!.{65}) look ahead,最多不超过64个字符
  • 后跟[\w'-]+[a-zA-Z0-9_'-]中的一个或多个
  • 后接any amount中的(?:\.?[\w'-]+)* non capturing group,其中包含句点.,然后是一个或多个[a-zA-Z0-9_'-],直到$结束

还有demo at regex101 for trying