假设我在一个名为$text
的变量中有一个文本,我想验证它,以便它可以包含空格,下划线,点和来自任何语言和任何数字的任何字母。由于我是一个带有正则表达式的总菜鸟,我以为我可以解决这个问题,就像这样:
if (!ctype_alnum(str_replace(".", "", str_replace(" ", "", str_replace("_", "", $text))))) {
//invalid
}
这正确地将以下输入视为有效:
到目前为止,这么好。但如果我输入我的名字LajosÁrpád,其中包含非英文字母,那么它被认为是无效的。
如果文本中的每个字符都是字母或数字,则返回TRUE, 否则就错了。
我认为需要更改设置以允许非英文字母,但是当且仅当$text
仅包含与文化无关的字母或数字时,如何使用ctype_alnum返回true?< / p>
或者,我知道可以使用一些幽灵般的正则表达式来解决这个问题,包括\p{L}
这样的问题很好,但我很想知道是否可以使用ctype_alnum
。
答案 0 :(得分:1)
您需要setlocale
category
设置为LC_CTYPE
,ctype_*
系列函数的相应区域设置才能处理非英文字符。
请注意,您与locale
一起使用的setlocale
需要在系统上实际安装,否则无法正常工作。解决这种情况的最佳方法是使用便携式解决方案,给定in this answer to a similar question。