我想要一个正则表达式来检查最多14个字母数字字符串的字符串。可以包括连字符,而不是开头或结尾。
这是我到目前为止所做的:
var patt = new RegExp("^([a-zA-Z0-9]+(-[a-zA-Z0-9])*){1,14}$");
但它不起作用 - http://jsfiddle.net/u6cWs/1/
有什么想法吗?
答案 0 :(得分:1)
你需要使用正向前瞻(带有可选连字符的字母数字字符数)。
如果只允许使用单个连字符:
^(?=([a-zA-Z0-9]-?){1,14}$)[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)?$
<强> Demo 强>
如果允许多个连字符:
^(?=([a-zA-Z0-9]-?){1,14}$)[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$
<强> Demo 强>
附加选项:
^[a-zA-Z0-9](?:-?[a-zA-Z0-9]){0,13}$
<强> Demo 强>
答案 1 :(得分:1)
这是一个更快的简单解决方案,因为它不使用前瞻:
^[A-Za-z0-9](?:[-A-Za-z0-9]{0,12}[A-Za-z0-9])?$
见demo。
它是如何运作的?
^
和$
之间,强制限制字符数。(?:
非捕获组中的其余字符串最后由?
设置为可选。字符串的其余部分(如果有)(多个字符)必须以字母或数字结尾。在中间,你可以有0到12个字母,数字或连字符。<强>任选地强>
如果您希望正则表达式更短一些,请启用不区分大小写的选项,并删除小写字母或大写字母,例如:
^[a-z0-9](?:[-a-z0-9]{0,12}[a-z0-9])?$
答案 2 :(得分:0)
使用两个正则表达式以简化和可读性。
首先检查它是否匹配:
/^[A-Za-z0-9-]{1,14}$/
然后检查它是否与此匹配:
/^-|-$/