Lisp Is Ipv 4 Adress
(defun split-on-char (s ch)
  (loop with start = 0
        for pos = (position ch s :start start)
        collect (subseq s start pos)
        while pos
        do (setf start (1+ pos))))

(defun is-ipv4-address (input-string)
  (let ((parts (split-on-char input-string #\.)))
    (and (= (length parts) 4)
         (every (lambda (v)
                  (and (> (length v) 0)
                       (every #'digit-char-p v)
                       (<= (parse-integer v) 255)
                       (string= v (write-to-string (parse-integer v)))))
                parts))))

This splits the string by dots and validates each part as a normal IPv4 octet.