I’m working on a project in Plait, a sublanguage of Racket, and I need to validate phone numbers. The phone numbers should be in the format “xxx-xxx-xxxx” where the area code is either “787” or “939”. However, Plait doesn’t support regular expressions directly. How can I validate these phone numbers without utilizing regex?
This is my current code:
#lang plait
;; Define a type for a single digit (0-9)
type digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
;; Define a type for three digits (a sequence of 3 digits)
type three-digits = [digit digit digit]
;; Define a type for four digits (a sequence of 4 digits)
type four-digits = [digit digit digit digit]
;; Define a type for the area code (787 or 939)
type area-code = 787 | 939
;; Define a type for the phone number (format: xxx-xxx-XXXX)
(define-type (phone-number) (String))
;; Function to validate the phone number
(:: validate-phone-number (String -> Boolean))
(define (validate-phone-number phone)
(define phone-pattern (regexp "^\(787\|939\)-[0-9]{3}-[0-9]{4}$"))
(regexp-match? phone-pattern phone))
;; Test cases
(validate-phone-number "787-123-4567") ;; should return #t (true)
(validate-phone-number "939-987-6543") ;; should return #t (true)
(validate-phone-number "800-123-4567") ;; should return #f (false)
(validate-phone-number "787-12-4567") ;; should return #f (false)
The following error occurs when validating the phone number:
enter image description here
define: bad syntax in: (define (validate-phone-number phone) (define phone-pattern (regexp “^(787|939)-[0-9]{3}-[0-9]{4}$”)) (regexp-match? phone-pattern phone))
Jose Enrique Plaud is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.