可以用正则表达式完成吗?

时间:2013-06-10 22:50:04

标签: javascript regex alphanumeric

使用以下正则表达式:([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 =>无效,已包含-

我当前正则表达式的问题在于,由于某种原因,接受字符串末尾的任何不是._-的字符,并且无法弄清楚原因。

另一个问题是,它没有检查它是否只包含允许的特殊字符。

有什么想法吗?

6 个答案:

答案 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)

正则表达式中的点具有特殊含义:“此处任何字符”。

如果你的意思是一个文字点,你应该将它转义为告诉正则表达式解析器。

Escape dot in a regex range