我需要创建一个字符串的开头和结尾,字母数字范围介于5到20个字符之间,字符之间可能有空格或没有空格。 /^[a-z\s?A-Z0-9]{5,20}$/
但这不起作用。
修改
测试测试 - 应该通过
测试 - 应该通过
测试测试 - 不应该通过
答案 0 :(得分:6)
如果不编写一个可笑的长表达式,你不能用传统的正则表达式做到这一点,所以你需要使用前瞻:
/^(?=(\w| ){15,20}$)\w+ ?\w+$/
这说明,确保匹配中有15到20个字符,然后匹配/\w+ \w+/
注意我使用\ w进行简化。它与上面的角色类相同,除了它也接受下划线。如果你不想匹配它们,你必须这样做:
/^(?=[a-zA-Z0-9 ]{15,20}$)[a-zA-Z0-9]+ ?[a-zA-Z0-9]+$/
答案 1 :(得分:2)
您无法在?
内加[...]
。 [...
]用于精确指定一组字符,您不能(?
)在一组字符中包含一个字符。任何特定字符的出现都是可选的,?
毫无意义。
如果您在匹配中允许任意数量的空格,只需删除问号即可。如果你想允许一个空格而不是更多空间,那么单独的正则表达式不能为你做那些,你需要像
这样的东西if (myString.match(/^[a-z\sA-Z0-9]{5,20}$/ && myString.match(/\s/g).length <= 1)
你不能用一个传统的正则表达式做到这一点,而不是几十行;正则表达式用于匹配比这更简单的模式。
如果您只想使用正则表达式,则可以使用两个而不是一个。第一个匹配一般模式,第二个确保只找到一个非空格字符。
if (myString.match(/^[a-z\sA-Z0-9]{5,20}$/ && myString.match(/^[^\s]*\s?[^\s]*$/))) {
inputs = ["test test", "testtest", "test test test"];
for (index in inputs) {
var myString = inputs[index];
if (myString.match(/^[a-z\sA-Z0-9]{5,20}$/ && myString.match(/^[^\s]*\s?[^\s]*$/))) {
console.log(myString + " matches.")
} else {
console.log(myString + " does not match.")
}
}
这会产生问题中指定的输出。
答案 2 :(得分:-1)
嗯,所以这里是相同的长期传统的正则表达式
(?i)[a-z0-9]+( [a-z0-9]+)?{5,12}
js vesrion(没有嵌套量词)
/^([a-z0-9]( [a-z0-9])?){5,12}$/i