我正在尝试创建一个正则表达式来验证网址路径。我想出了这个:
^\/([a-zA-Z0-9\-]+)?$
这允许我使用have/
或or/moo
或更复杂的方法,/products-123
但不允许我使用多个正斜杠,例如/blog/posts-123
。有人可以帮我弄这个吗?
理想情况下,它应该能够:
如果有人可以帮助我,那就太好了
此正则表达式允许
let urls = [
'/',
'/aaa-bbb',
'/aaa-bbb/ccc',
'/aaa-bbb/ccc/ddd',
'/aaa-bbb/ccc/ddd/eee',
'', // empty
'//double-slash',
'/end-with-slash/',
];
let regex = /^(\/|(\/[a-zA-Z0-9\-]+)+)$/;
urls.forEach((url) => {
let result = regex.test(url);
console.log('"' + url + '" ==> ' + result);
});
结果:
"/" ==> true
"/aaa-bbb" ==> true
"/aaa-bbb/ccc" ==> true
"/aaa-bbb/ccc/ddd" ==> true
"/aaa-bbb/ccc/ddd/eee" ==> true
"" ==> false
"//double-slash" ==> false
"/end-with-slash/" ==> false
从结果中可以看到,它可以防止出现空的URL路径,带有双斜杠的URL路径以及以斜杠结尾的URL路径。
正则表达式的说明:
^(\/|(...)+)$
-期望一个斜杠或括号中的1+序列\/[a-zA-Z0-9\-]+$
-括号中的序列为斜杠,后跟一个或多个字母数字和破折号