我正在努力创建一个符合以下条件的ruby正则表达式:
支持的内容:
- A-Z,a-z,0-9,在中间使用破折号但不能以破折号开头或结尾。
- 至少5个字符,不超过500个字符
到目前为止,我已经有了以下正则表达式:
[0-9a-z]{5,500}
有没有任何建议能够满足以上的条件更新?谢谢。
[A-Za-z\d][-A-Za-z\d]{3,498}[A-Za-z\d]
如果您也愿意将_
视为字母,那么这个问题就更简单了:
\w[-\w]{3,498}\w
[0-9A-Za-z][0-9A-Za-z-]{3,498}[0-9A-Za-z]
给你:
/^[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-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]
4---F
? - matthias