(defun restricted-read-from-minibuffer (prompt allowed-chars)
"Read a string from the minibuffer, prompting with PROMPT.
The only allowed characters are those in the string ALLOWED-CHARS."
(let ((m (make-keymap)))
(define-key m [t] #'ignore)
(define-key m (kbd "RET") #'exit-minibuffer)
(define-key m (kbd "<return>") #'exit-minibuffer)
(define-key m (kbd "C-j") #'exit-minibuffer)
(define-key m (kbd "C-g") #'abort-minibuffers)
(dolist (c (split-string allowed-chars "" t))
(define-key m c #'self-insert-command))
(read-from-minibuffer prompt nil m)))