2

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

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

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

有任何想法吗?

4

6 回答 6

3

试试这个:

^(?!(.*[.|_|-].*){2})(?!.*[.|_|-]$)[a-zA-Z0-9//._-]{3,12}$

正则表达式链接。上面的正则表达式最多允许.,_-.

于 2013-06-10T23:15:45.673 回答
1

希望这对你有用: -

它说以字符开头,后跟 (-,.,_),然后以字符结尾

^[\w\d]*[-_\.\w\d]*[\w\d]$
于 2013-06-10T22:53:41.660 回答
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]+)?请确保其后至少有一个非分隔符。

请注意,/在正则表达式中没有特殊含义。如果您使用的是正则表达式文字(因为/是正则表达式分隔符),您只需要转义它,并且您通过使用反斜杠而不是另一个正斜杠作为前缀来转义它。在字符类中,您不需要转义点 ( .) 以使其与文字点匹配。

于 2013-06-10T23:57:38.603 回答
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 中检查属性来验证这一点更有意义,而不是过度复杂化正则表达式。

于 2013-06-10T23:36:12.357 回答
1

您需要的是一个或多个字符串,其中包含所有大写、小写和数字字符,后跟“-”、“.”或“_”中的一个或一个字符,后跟至少一个字符:

^[a-zA-Z0-9]+[-|_|\.]{0,1}[a-zA-Z0-9]+$ 
于 2013-06-10T23:07:03.380 回答
0

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

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

正则表达式范围内的转义点

于 2013-06-10T22:53:32.307 回答