让我们假设我在一个名为$text
的变量中有一个文本,我想验证它,这样它就可以包含空格、下划线、点以及任何语言的任何字母和任何数字。由于我完全不懂正则表达式,我想我可以学习它,比如:
if (!ctype_alnum(str_replace(".", "", str_replace(" ", "", str_replace("_", "", $text))))) {
//invalid
}
这正确地认为以下输入有效:
- foobarloremipsum
- foobarloremipsu1m
- foobarloremi psu1m
- foobar_remi-psu1m
到目前为止,一切都很好。但如果我输入我的名字LajosÁrpád,其中包含非英文字母,那么它将被视为无效。
如果文本中的每个字符都是字母或数字,则返回TRUE,否则为FALSE。
来源。
我认为需要更改设置以允许使用非英文字母,但如果且仅当$text
以文化不可知的方式仅包含字母或数字,我如何使用ctype_alnum返回true?
或者,我知道可以使用一些怪异的正则表达式来解决这个问题,包括像'p{L}
这样的东西,这很好,但我很想知道使用ctype_alnum
是否可行。
您需要在category
设置为LC_CTYPE
的情况下使用setlocale
,并为ctype_*
函数族使用适当的语言环境来处理非英语字符。
请注意,与setlocale
一起使用的locale
需要实际安装在系统上,否则它将无法工作。解决这种情况的最好方法是使用一个可移植的解决方案,在这个类似问题的答案中给出。