替Laravel網站加一個選填的「現有網站網址」,訪客明明留白,送出卻被告知網址不正確。先別急著拿掉網址驗證:你要放行的是沒填資料,不是填了什麼都接受。
選填與格式正確,是兩件事
Laravel預設會整理輸入的空白,並把空字串轉成null。若網址只有url規則,這個null仍可能被判成不合格式。選填欄位可以用nullable,表示接受null;有填內容時,再檢查它是不是允許的網址。
在既有Laravel控制器的Request驗證中,可把規則寫成:
$validated = $request->validate([
'site_url' => ['nullable', 'url:http,https', 'max:2048'],
]);
這裡只接受HTTP與HTTPS格式,長度也有限制。它不是必填欄位;如果你的流程確實非填不可,才改用required。不要一邊標「選填」,一邊在後端要求必填。
用三種輸入,看規則有沒有符合用途
網址值是null時,單獨url規則會失敗,nullable搭配url會通過;改成required搭配url,又會要求填入資料。填https://example.com時,三者都能通過;填wrong-address時,三者都會擋下。
先在自己的測試網站分別留白、填完整網址、填一段普通文字。若留白仍被擋,查實際送到驗證器的值,以及Form Request、前端欄位或自訂規則是否另有必填要求。不要只看畫面上的星號。
通過格式檢查,不代表可以直接抓取這個網址
url規則判斷格式,不會替你保證網頁存在、內容可信或適合伺服器存取。若網站接著會下載訪客提供的網址,還需要另做目的地與網路存取限制。只收集網址作為聯絡背景,則保存驗證後的欄位,呈現時仍要正常跳脫文字。
選填網址的重點是讓沒有網站的訪客也能繼續,並讓有填的人收到清楚、貼近欄位用途的錯誤提示。
參考資料
資料核對於2026年10月3日;範例與文件可能更新。
原文鏈接:https://wntheme.com/laravel-nullable-optional-url/,轉載請註明出處。

評論0