使用以下正则表达式:([a-zA-Z0-9//._-]{3,12}[^//._-])
使用像pattern="([a-zA-Z0-9/._-]{3,12}[^/._-])"
来验证用户名的HTML文本输入,我想知道是否还有告诉它检查字符串只有以下之一: .
,-
,_
我的意思是,我需要正则表达式以完成以下操作(如果可能的话)
alex-how
=>有效alex-how.
=>无效,因为在.
alex.how
=>有效alex.how-ha
=>无效,已包含.
alex-how_da
=>无效,已包含-
我当前正则表达式的问题在于,由于某种原因,接受字符串末尾的任何不是._-
的字符,并且无法弄清楚原因。
另一个问题是,它没有检查它是否只包含允许的特殊字符。
有什么想法吗?
答案 0 :(得分:3)
试试这个:
^(?!(.*[.|_|-].*){2})(?!.*[.|_|-]$)[a-zA-Z0-9//._-]{3,12}$
Regexpal link。上面的正则表达式允许最多 .
,_
或-
中的一个。
答案 1 :(得分:1)
希望这对你有用: -
它表示以字符开头,后跟( - ,。,_),后跟,以字符结尾
^[\w\d]*[-_\.\w\d]*[\w\d]$
答案 2 :(得分:1)
您想要的是一个或多个包含所有上,下和数字字符的字符串 后跟“ - ”,“。”或“_”中的一个或任何一个字符,后跟至少一个字符:
^[a-zA-Z0-9]+[-|_|\.]{0,1}[a-zA-Z0-9]+$
答案 3 :(得分:1)
我想要你似乎:
^[A-Za-z0-9]+(?:[\._-][A-Za-z0-9]+)?$
打破它:
^
:行首[A-Za-z0-9]+
:一个或多个字母数字字符(?:[\._-][A-Za-z0-9]+)?
:(可选,未捕获)您允许的特殊字符之一,后跟一个或多个字母数字字符$
:行尾从你的问题中不清楚你是否想要一个特殊字符(.
,-
和_
)是可选的或必需的(例如,零或一对一)正好一)。如果你真的想要要求一个这样的特殊字符,那么你最好在最后摆脱?
。
以下是对示例输入的正则表达式的演示:
http://rubular.com/r/SQ4aKTIEF6
至于长度要求(3到12个字符之间):这可能是一个警察,但我个人认为通过直接检查length
属性来验证这个更有意义。 JavaScript,而不是使正则表达式过于复杂。
答案 4 :(得分:1)
^(?=[a-zA-Z0-9/._-]{3,12}$)[a-zA-Z0-9]+(?:[/._-][a-zA-Z0-9]+)?$
或者,作为JavaScript正则表达式文字:
/^(?=[a-zA-Z0-9\/._-]{3,12})[a-zA-Z0-9]+(?:[\/._-][a-zA-Z0-9]+)?$/
(?=[a-zA-Z0-9/._-]{3,12}$)
执行整体长度验证。[a-zA-Z0-9]+
确保名称以至少一个非分隔符开头。(?:[/._-][a-zA-Z0-9]+)?
会确保其后至少有一个非分隔符。请注意,/
在正则表达式中没有特殊含义。如果你正在使用正则表达式文字(因为/
是正则表达式分隔符),你只需要逃避它,并通过前缀使用反斜杠而不是另一个正斜杠来转义它。在字符类中,您不需要转义点(.
)以使其与文字点匹配。
答案 5 :(得分:0)