我正在为URL验证创建正则表达式。不知何故,我已经根据需要验证了 Url,但我的要求是在域名https://asasas.com/
特殊字符不应该允许之后持续存在。想知道如何限制它吗?
我的正则表达式
第 1 部分:(https?://(?:www.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9].[^s]{2,}|www.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9].[^s]{2,}|https?://(?:www.|(?!www))[a-zA-Z0-9]+.[^s]{2,}|www.[a-zA-Z0-9]+.[^s]{2,})
第
2 部分:[/]+[a-zA-Z0-9~@#$
!^%*;'&()<>_+=[]{}|\,.?: -]+.(?:jpg$|gif$|png$|jpeg$(/'
第 1部分正则表达式用于验证 URL,第2 部分正则表达式用于验证字符串是否应以 .JPG 或 .PNG 或 .JPEG 或.GIF
我的要求是不应该允许吗?
1( https://ssas.com//////////////////////////sds.png
2( https://ssas.com/sds//@#$%/j^&&*///.png
成功案例:
每个特殊字符都应该有单词或数字
1( https://ssas.com/sds/sdsd/s#df^ggasa/dadsa.png
您可以先使用 URL 验证 URL,而不是使用正则表达式验证整个 URL。
然后,您可以检查协议是否以http开头,并使用模式来检查源之后的字符串是否以允许的扩展名之一结尾,并且该字符串不包含您认为特殊的连续字符。
如果要获得不区分大小写的匹配项,可以使用/i
标志。
该模式由 2 个断言组成(非消耗性(
^(?=.*.(?:jpe?g|png|gif)$)(?!.*[/~@#$!^%*;'&()<>_+=[]{}|,.?:-][/~@#$!^%*;'&()<>_+=[]{}|,.?:-])
在部分
^
字符串开头(?=
积极向前看,断言右边的东西是.*.(?:jpe?g|png|gif)$
匹配字符串末尾$
列出的任何内容
)
关闭前瞻(?!
消极的前瞻性,断言右边的东西不是.*
匹配除换行符以外的任何字符 0+ 次[/~@#$!^%*;'&()<>_+=[]{}|,.?:-]
匹配列出的任何一项[/~@#$!^%*;'&()<>_+=[]{}|,.?:-]
同上
)
关闭展望
正则表达式演示
[
"https://ssas.com//////////////////////////sds.png",
"https://ssas.com/sds//@#$%/j^&&*///.png",
"https://ssas.com/sds/sdsd/s#df^ggasa/dadsa.png"
].forEach(s => {
let url = new URL(s);
let secondPart = url.href.replace(url.origin, '');
let pattern = /^(?=.*.(?:jpe?g|png|gif)$)(?!.*[/~@#$!^%*;'&()<>_+=[]{}|,.?:-][/~@#$!^%*;'&()<>_+=[]{}|,.?:-])/i;
if (
url.protocol.startsWith("http") &&
pattern.test(secondPart)) {
console.log(s);
}
})