簡體   English   中英

如何通過 Postgres 中的檢查約束驗證 URL?

[英]How to validate a URL via a check constraint in Postgres?

這是我嘗試過的眾多檢查表達式之一:

(url::text ~* 'https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,255}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)'::text)

這永遠不會奏效。

然而奇怪的是,這樣做(對於 email 驗證):

(email::text ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$'::text)

我不確定這兩個檢查表達式之間的區別是什么,盡管我很想知道。

那么如何通過 Postgres 中的檢查約束來驗證 URL 呢?

在問題下方的評論的幫助下,我已經修復了您對 URL 驗證的表達。 所以,僅供分享:

(website :: text ~* 'https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,255}\.[a-z]{2,9}\y([-a-zA-Z0-9@:%_\+.~#?&//=]*)$' :: text)

我已將此答案中的 URL 正則表達式改編為 Postgres 檢查。 這應該可以處理任何有效的 URL。

CHECK ((url ~ '^[a-z](?:[-a-z0-9\+\.])*:(?:\/\/(?:(?:%[0-9a-f][0-9a-f]|[-a-z0-9\._~!\$&''\(\)\*\+,;=:@])|[\/\?])*)?'::text))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM