diff --git a/redfish-core/lib/event_service.hpp b/redfish-core/lib/event_service.hpp
index 04b46e0..2b63955 100644
--- a/redfish-core/lib/event_service.hpp
+++ b/redfish-core/lib/event_service.hpp
@@ -18,6 +18,8 @@
 
 #include <app.hpp>
 #include <boost/beast/http/fields.hpp>
+#include <http/utility.hpp>
+#include <logging.hpp>
 #include <query.hpp>
 #include <registries/privilege_registry.hpp>
 
@@ -266,56 +268,27 @@
                 }
             }
 
-            // Validate the URL using regex expression
-            // Format: <protocol>://<host>:<port>/<uri>
-            // protocol: http/https
-            // host: Exclude ' ', ':', '#', '?'
-            // port: Empty or numeric value with ':' separator.
-            // uri: Start with '/' and Exclude '#', ' '
-            //      Can include query params(ex: '/event?test=1')
-            // TODO: Need to validate hostname extensively(as per rfc)
-            const std::regex urlRegex(
-                "(http|https)://([^/\\x20\\x3f\\x23\\x3a]+):?([0-9]*)(/"
-                "([^\\x20\\x23\\x3f]*\\x3f?([^\\x20\\x23\\x3f])*)?)");
-            std::cmatch match;
-            if (!std::regex_match(destUrl.c_str(), match, urlRegex))
+            std::string host;
+            std::string urlProto;
+            uint16_t port = 0;
+            std::string path;
+
+            if (!crow::utility::validateAndSplitUrl(destUrl, urlProto, host,
+                                                    port, path))
             {
+                BMCWEB_LOG_WARNING
+                    << "Failed to validate and split destination url";
                 messages::propertyValueFormatError(asyncResp->res, destUrl,
                                                    "Destination");
                 return;
             }
 
-            std::string uriProto = std::string(match[1].first, match[1].second);
-            if (uriProto == "http")
-            {
-#ifndef BMCWEB_INSECURE_ENABLE_HTTP_PUSH_STYLE_EVENTING
-                messages::propertyValueFormatError(asyncResp->res, destUrl,
-                                                   "Destination");
-                return;
-#endif
-            }
-
-            std::string host = std::string(match[2].first, match[2].second);
-            std::string port = std::string(match[3].first, match[3].second);
-            std::string path = std::string(match[4].first, match[4].second);
-            if (port.empty())
-            {
-                if (uriProto == "http")
-                {
-                    port = "80";
-                }
-                else
-                {
-                    port = "443";
-                }
-            }
             if (path.empty())
             {
                 path = "/";
             }
-
             std::shared_ptr<Subscription> subValue =
-                std::make_shared<Subscription>(host, port, path, uriProto);
+                std::make_shared<Subscription>(host, port, path, urlProto);
 
             subValue->destinationUrl = destUrl;
 
