Regex 修改URL验证正则表达式

Regex 修改URL验证正则表达式,regex,Regex,我在何处添加了表达式[A-Za-z0-9.,/&=?:+%-],以仅允许使用这些特定字符,同时保持URL的格式为$regex格式 我尝试在^之后的开头添加它,但它发现每个URL都是无效的URL,在从表达式中删除^之后 $regex工作正常,可以防止像www..doma@$n.@om这样奇怪的URL,但是当涉及到后面的部分时,就像 www.domain.com/alert'Hacked',它只允许使用每一个特殊字符,所以我决定只允许字母数字和.,/&=?:+%-因为它们在每个URL中都使用。只需将

我在何处添加了表达式[A-Za-z0-9.,/&=?:+%-],以仅允许使用这些特定字符,同时保持URL的格式为$regex格式

我尝试在^之后的开头添加它,但它发现每个URL都是无效的URL,在从表达式中删除^之后

$regex工作正常,可以防止像www..doma@$n.@om这样奇怪的URL,但是当涉及到后面的部分时,就像

www.domain.com/alert'Hacked',它只允许使用每一个特殊字符,所以我决定只允许字母数字和.,/&=?:+%-因为它们在每个URL中都使用。

只需将[^\s]替换为您想要的表达式[A-Za-z0-9.,/&=?:+%-]

例如:

我注意到u和iuS被删除了,如果正则表达式没有它们,它们有什么用处?在PHP中,u被用作分隔符。有关分隔符的详细信息,请单击标志图标@regex101。如果您想知道标志是什么以及它们代表什么。。
$regex = "_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS";