我在理解模式匹配方面遇到了问题。我已经把它弄清楚了,但我遇到了这个我需要匹配的特定模式的麻烦。
要求: 检查用户名的格式。它应该以一封信开头 后跟字母,数字和句号。用户名应为 至少6个字符但不超过12个。
这是我到目前为止所做的:
var user = document.getElementById('username').value;
var pos = user.search(/^[A-z](?=.*?[A-z])(?=.*?[0-9])\./);
答案 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}$
这个应该适合你,因为你对任何角色的最小出现都没有约束。