检查一个字符(不是字符串)是小写、大写还是字母数字?

Check if a character (not string) is lowercase, uppercase, alphanumeric?

检查 Elisp 中的单个字符是小写、大写、字母数字、数字、空格或任何其他类似字符类别的惯用且​​最有效的方法是什么?例如 Python 有类似 isdigit() 的字符串方法,但是在 Elisp 中将一个字符(只是一个数字)转换为一个字符串来检查它是否属于某种情况或类别似乎是一种错误的方法:

(string-match-p "[[:lower:]]" (char-to-string ?a))

没有标准的方法,但我认为自己动手并不难:

(defun wordp (c) (= ?w (char-syntax c)))
(defun lowercasep (c) (and (wordp c) (= c (downcase c))))
(defun uppercasep (c) (and (wordp c) (= c (upcase c))))
(defun whitespacep (c) (= 32 (char-syntax c)))

另请参阅 cl-lib.el 中的 cl-digit-char-p

使用get-char-code-property查找字符的Unicode通用类别。例如,小写字母给出的值为 "Ll":

(string= "Ll" (get-char-code-property ?a 'general-category))
     ⇒ t

大写字母 "Lu",小数 "Nd"。见 full list of values.