Regex 正则表达式-带连字符的字母顺序
我希望有一个正则表达式来检查字符串是否包含多达14个字母数字字符。可以包括连字符,而不是在开头或结尾 这就是我迄今为止所做的:Regex 正则表达式-带连字符的字母顺序,regex,Regex,我希望有一个正则表达式来检查字符串是否包含多达14个字母数字字符。可以包括连字符,而不是在开头或结尾 这就是我迄今为止所做的: var patt = new RegExp("^([a-zA-Z0-9]+(-[a-zA-Z0-9])*){1,14}$"); 但它不起作用- 有什么想法吗?您需要使用正向前瞻(使用可选连字符计算字母数字字符数) 如果只允许使用单连字符: ^(?=([a-zA-Z0-9]-?){1,14}$)[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)?$ 如果允
var patt = new RegExp("^([a-zA-Z0-9]+(-[a-zA-Z0-9])*){1,14}$");
但它不起作用-
有什么想法吗?您需要使用正向前瞻(使用可选连字符计算字母数字字符数) 如果只允许使用单连字符:
^(?=([a-zA-Z0-9]-?){1,14}$)[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)?$
如果允许使用多个连字符:
^(?=([a-zA-Z0-9]-?){1,14}$)[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$
附加选项:
^[a-zA-Z0-9](?:-?[a-zA-Z0-9]){0,13}$
这里有一个简单的解决方案,由于它不使用lookaheads,因此速度更快:
^[A-Za-z0-9](?:[-A-Za-z0-9]{0,12}[A-Za-z0-9])?$
看
它是如何工作的?
^
和$
之间,强制执行我们对字符数的限制^[a-z0-9](?:[-a-z0-9]{0,12}[a-z0-9])?$
为了简单易读,使用两个正则表达式 首先检查它是否与此匹配:
/^[A-Za-z0-9-]{1,14}$/
然后检查它是否与此不匹配:
/^-|-$/
将您的正则表达式更改为这样,然后尝试一次
/^([a-zA-Z0-9]+([a-zA-Z0-9-]){1,14}$/
它可以有多个连字符吗?它是否有效a-b-c
?@Ulugbek Umirov-yes@cheziHoyzer其中一个答案有效吗,或者你还在努力解决吗?请告诉我们。:)这是一个很好的解决方案。您需要在最后一个字符之前添加可选连字符。为什么不^(?!-)[a-z0-9-]{0,13}[a-z0-9]$
=)@UlugbekUmirov这是一个很好的解决方案。
谢谢,您的也是。:)您需要在最后一个字符之前添加可选连字符
不要这样认为,请参阅@zx81123456789-123-4
不匹配,而它应该匹配。@UlugbekUmirov Ha这是我们对它的不同理解。我假设最大宽度为14。+1--不是我的方法,但它有效,答案解释得很好。:)