正则表达式允许 A-z、0-9 和破折号出现在中间,但不允许出现在开头和结尾?

3

我正在努力创建一个符合以下条件的ruby正则表达式:

支持的内容:

  • A-Z,a-z,0-9,在中间使用破折号但不能以破折号开头或结尾。
  • 至少5个字符,不超过500个字符

到目前为止,我已经有了以下正则表达式:

[0-9a-z]{5,500}

有没有任何建议能够满足以上的条件更新?谢谢。

你允许在两个字母数字之间有多个破折号吗,比如说 4---F - matthias
4个回答

7
[A-Za-z\d][-A-Za-z\d]{3,498}[A-Za-z\d]

如果您也愿意将_视为字母,那么这个问题就更简单了:

\w[-\w]{3,498}\w

你和boltclock都有很好的答案。谢谢。哪一个是最好的? - AnApprentice
我的肯定更高端一些。;-) 不过,说真的,两者都很好(虽然我比BoltClock快了一秒,哈哈哈)。;-) - C. K. Young

6
这应该可以工作:
[0-9A-Za-z][0-9A-Za-z-]{3,498}[0-9A-Za-z]

你和boltclock都有很好的答案。谢谢。哪一个是最好的? - AnApprentice
1
你不需要在第二个括号内的最后一个破折号处进行转义吗? - matthias
2
@matthias: 不确定Ruby正则表达式,但在其他版本中,如果它位于字符类的开头或结尾,就不需要转义。 - BoltClock
@ColdTree:如果我要字面上理解你评论中的错别字,那么我的显然是最好的:P 但说真的,只需选择你喜欢的即可。 - BoltClock

1

给你:

/^[0-9A-Za-z][0-9A-Za-z\-]{3,498}[0-9A-Za-z]$/

或者如果你想让开头和结尾只包含0-9、A-Z、a-z(而不是非破折号),那么:

解释:

第一个^匹配字符串的开头。

下一个[]匹配A-Z、a-z、0-9

下一个[]匹配3到498个字符的A-Z、a-z、0-9、破折号。请注意,我们匹配3到498个字符,因为我们在开头和结尾各匹配一个字符。

下一个[^]再次匹配A-Z、a-z、0-9。

最后,我们匹配$以表示字符串的结尾。


0

这假设要么总是有短横线,要么从不带短横线。它还假定在字母数字字符之间只允许一个破折号。这是我能想到的限制字符而不是字符串实例数量的唯一方法。

(([0-9a-zA-Z]{4,499})|([0-9a-zA-Z][\d]?){2,249})[0-9a-zA-Z]

假设允许相邻破折号的数量没有限制,那么可以使用以下代码:

[0-9a-zA-Z][0-9a-zA-Z\d]{3,498}[0-9a-zA-Z]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接