正则表达式X字符长,字母数字但不是_和句点,但不是在开头或结尾

时间:2013-05-09 18:58:37

标签: javascript regex

正如主题所示,我需要一个JavaScript正则表达式X个字符长,它接受字母数字字符,但不接受下划线字符,并且还接受句点,但不接受句子的开头或结尾。期间也不能连续。

我几乎可以到达我想要搜索的地方,并在Stack Overflow(such as here)上阅读其他人的问题和答案。

但是,在我的情况下,我需要一个字符串,其长度必须为X个字符(例如6个),并且可以包含字母和数字(不区分大小写),也可以包含句点。

所述句点不能连续,也不能开始或结束字符串。

Jd.1.4有效,但Jdf1.4f不是(7个字符)。

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

是我能够使用其他人的示例构建的,但我不能让它只接受与设定长度相匹配的字符串。

/^((?:[a-z\d]+(?:\.(?!$))?)+){6}$/i

的作用是它现在接受不少于6个字符,但它也乐意接受任何更长的时间......

我显然错过了什么,但我不知道它是什么。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

这应该有效:

/^(?!.*?\.\.)[a-z\d][a-z\d.]{4}[a-z\d]$/i

说明:

^             // matches the beginning of the string
(?!.*?\.\.)   // negative lookahead, only matches if there are no
              // consecutive periods (.)
[a-z\d]       // matches a-z and any digit
[a-z\d.]{4}   // matches 4 consecutive characters or digits or periods
[a-z\d]       // matches a-z and any digit
$             // matches the end of the string

答案 1 :(得分:2)

另一种方法:

/(?=.{6}$)^[a-z\d]+(?:\.[a-z\d]+)*$/i

说明:

      (?=.{6}$)   this lookahead impose the number of characters before 
                  the end of the string
      ^[a-z\d]+   1 or more alphanumeric characters at the beginning
                  of the string
(?:\.[a-z\d]+)*   0 or more groups containing a dot followed by 1 or 
                  more alphanumerics
              $   end of the string