我正在撰寫一個正則運算式來嘗試過濾掉無效的網址。這應該很簡單 - 在線提供了一百萬個示例,我最終使用了這個:((https?|ftp|file)://)[-A-Za-z0-9 &@#/%?=~_|!:,.;] [-A-Za-z0-9 &@#/%=~_|].
但是,我們的具體要求規定網址必須以“?”結尾。或者 ”&”。這也應該相當簡單,可以通過添加(\\?|\\&)到正則運算式的末尾來完成。
但是,以下要求進一步復雜化:如果“?” 已經存在于字串中,則 url 必須以 & 結尾,反之亦然“與前面陳述句中的主要專案相反”。
應該注意的是,上面寫的正則運算式和這個問題的一般背景關系在 javascript 規范內。
根據評論者的要求進行編輯
輸入網址示例:
不 ”?” 或“&”:
https://helloworld.io/foobar回傳false
不 ”?” 或結尾的“&”:
https://helloworld.io/foo&bar回傳false
https://helloworld.io/foo?bar回傳false
結尾的單個特殊字符聲音:
https://helloworld.io/foobar?回傳true
https://helloworld.io/foobar&回傳true
在 url 中交替使用特殊字符:
https://helloworld.io/foo&bar?回傳true
https://helloworld.io/foo?bar&回傳true
在沒有唯一結尾的 url 中交替使用特殊字符:
https://helloworld.io/foo&bar?baz&回傳false
https://helloworld.io/foo?bar&baz?回傳false
最后發現重復的特殊字符:
https://helloworld.io/foo?bar?回傳false
https://helloworld.io/foo&bar&回傳false
交替使用末尾沒有特殊字符的特殊字符:
https://helloworld.io/foo&bar?baz回傳false
https://helloworld.io/foo?bar?baz回傳false
針對另一條評論的第二次編輯:
有了這個正則運算式,我的大部分問題都解決了:
((https?|ftp|file):\/\/)[-A-Za-z0-9 &@#/%?=~_|!:,.;] [-A-Za-z0-9 &@#/%=~_|](\\?|\\&)
但是,我無法測驗這樣的情況:
https://helloworld.io/foo&bar?baz?bum&
但是,這評估為有效,因為“&”存在于最后一個字符之前的字串中 - 它不能以“&”結尾。
uj5u.com熱心網友回復:
您可以使用以下正則運算式:
(https|ftp|file):\/\/[^\/] \/\w ((\?[^&\s] )?&|(&[^\?\s] )?\?)(\s|$)
解釋:
(https|ftp|file): 字首:\/\/: 冒號和雙斜杠[^\\]: 下一個斜線以外的任何東西\/: 斜線\w: 任何字母數字字符
然后有兩個選擇。
選項 1: (\?[^&\s] )?&:
(\?[^&\s] )?: 選修的 ?后跟除 & 以外的任何字符&: &
選項 2: (&[^\?\s] )?\?):
(&[^\?\s] )?: 可選 & 后跟除 ? 以外的任何字符\?: ?
以: * 結尾(\s|$):空格或尾串符號
這些將與您提供的示例相匹配。如需更多改進,請指出新示例。
在這里試試。
uj5u.com熱心網友回復:
從您的初始正則運算式作業:
((https?|ftp|file)://)[-A-Za-z0-9 &@#/%?=~_|!:,.;] [-A-Za-z0-9 &@#/%=~_|]
然后針對每種情況進行修改:
((https?|ftp|file)://)[-A-Za-z0-9 @#/%?=~_|!:,.;] [-A-Za-z0-9 @#/%=~_|]&
和
((https?|ftp|file)://)[-A-Za-z0-9 &@#/%=~_|!:,.;] [-A-Za-z0-9 &@#/%=~_|]\?
然后加入它們并洗掉公共前綴的重復項:
((https?|ftp|file)://)([-A-Za-z0-9 @#/%?=~_|!:,.;] [-A-Za-z0-9 @#/%=~_|]&|[-A-Za-z0-9 &@#/%=~_|!:,.;] [-A-Za-z0-9 &@#/%=~_|]\?)
添加^,$和 javascript 的正確轉義,這將是:
^((https?|ftp|file):\/\/)([-A-Za-z0-9 @#\/%?=~_|!:,.;] [-A-Za-z0-9 @#\/%=~_|]&|[-A-Za-z0-9 &@#\/%=~_|!:,.;] [-A-Za-z0-9 &@#\/%=~_|]\?)$
在 regex101 上進行測驗
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475199.html
標籤:javascript 正则表达式
