正则表达式模式匹配难度

时间:2014-02-28 20:01:07

标签: javascript regex

我在理解模式匹配方面遇到了问题。我已经把它弄清楚了,但我遇到了这个我需要匹配的特定模式的麻烦。

要求: 检查用户名的格式。它应该以一封信开头 后跟字母,数字和句号。用户名应为 至少6个字符但不超过12个。

这是我到目前为止所做的:

var user = document.getElementById('username').value;
var pos = user.search(/^[A-z](?=.*?[A-z])(?=.*?[0-9])\./);

3 个答案:

答案 0 :(得分:2)

尝试这种模式

var pattern = /^[A-Za-z][A-Za-z.0-9]{5,11}$/


^ matches beginning of file. 
[A-Za-z] = matches first letter
[A-Za-z.0-9] = Matches a-z both A-Z and a-z the . (dot) character and numbers 0-9
{5,11} = tells that the last character "group" should have between 5 or 11 occurrences. witch makes the total string between 6 and 12 characters long. 
$ = matches end of string

希望这有帮助!

修改

Javascript来做匹配

var pattern = /^[A-Za-z][A-Za-z.0-9]{5,11}$/

//assuming the var username contains the username
if(username.match(pattern)){
     alert("Valid pattern");
}
else{
     alert("Invalid pattern")
}

答案 1 :(得分:1)

  

它应该以字母开头,后跟字母,数字和句号。用户名长度应至少为6个字符,但不得超过12个。

因此,您希望允许以字母开头且至少包含一个点或数字且长度在5到12个字符之间的字符串。

在这种情况下,请使用以下内容:

^[A-Za-z](?=.*\d.*)(?=.*[.].*)[A-Za-z\d.]{5,11}$
  • ^匹配开始。
  • [A-Za-z]一封信。
  • (?=.*\d.*)正向前瞻 - 以下字符串包含至少1位数字。
  • (?=.*[.].*)正向前瞻 - 以下字符串包含至少1个点。
  • [A-Za-z\d.]{5,11}字符串的其余部分包含5到11个字母,数字和点(6到12之间的总字符串)。
  • $匹配结束。

注意: -

  • ?=正向查找不会影响匹配位置,因此匹配将在第二个字符处继续。
  • ?=正向查找之间隐含AND,因此两者都需要满足。

答案 2 :(得分:0)

^[a-zA-Z][a-zA-Z.]{5,11}$

这个应该适合你,因为你对任何角色的最小出现都没有约束。