String 检查字符串中的所有字母(来自任何主要口语)是否为大写字母

String 检查字符串中的所有字母(来自任何主要口语)是否为大写字母,string,internationalization,tcl,String,Internationalization,Tcl,我只是想检查字符串中出现的所有字母是否都是大写的(如果它们有小写和大写的变体)。Tcl的内置程序表现得并不理想,例如 string is upper "123A" 返回false,但我希望它返回true。如果A被替换为大写的西里尔字母,或者来自另一个没有大小写的流行字母表的字母,我也希望它返回true。我可以简单地从字符串中筛选出所有非字母,但我认为当您试图处理来自英语以外语言的字母时,这并不是那么简单。在这种情况下,您不希望字符串是大写的,因为这会检查字符串是否只是大写字母。(数字不是字母。

我只是想检查字符串中出现的所有字母是否都是大写的(如果它们有小写和大写的变体)。Tcl的内置程序表现得并不理想,例如

string is upper "123A"

返回false,但我希望它返回true。如果A被替换为大写的西里尔字母,或者来自另一个没有大小写的流行字母表的字母,我也希望它返回true。我可以简单地从字符串中筛选出所有非字母,但我认为当您试图处理来自英语以外语言的字母时,这并不是那么简单。

在这种情况下,您不希望
字符串是大写的,因为这会检查字符串是否只是大写字母。(数字不是字母。)

相反,您希望执行以下操作:

set str "123A"
if {$str eq [string toupper $str]} {
    # It's upper-case by your definition...
}

stringToCheck.ToUpper()==stringToCheck
我的印象是,Tcl(string-ToUpper)中的等效项在外来字母表中失败,但这似乎在最新版本的Tcl中得到了修复。@ZachConn我不知道Tcl。但是,例如Php有一个函数strtoupper(),它也遇到了同样的问题。但是php函数mb_strtoupper()没有。@nl-x:Tcl中的所有字符串都透明地感知mb。(有一些历史性的错误,但它们只是:历史性的。)