"is lower" 不适用于包含奇异字符的字符串
"is lower" not working for strings containing exotic characters
我有一个代码部分用于检查字符串是否全部为小写。如果是,它会给我第一个和最后一个字符作为缩写。如果不是,它给我大写部分作为缩写。
if Hotstring is lower
{
ShortString := SubStr(Hotstring,1,1) . SubStr(Hotstring,0)
}else{
ShortString := RegExReplace(Hotstring, "[a-záéiíóöőúüű ]", "")
StringLower,ShortString, ShortString
}
问题:
如果我的输入字符串包含中欧字符,则该字符串无法正确识别为小写字母。
我为自己创建了解决方法,首先将特殊字母转换为简单的 lcap 字母 - 只是为了查看完整字符串是否为 lcap。
检查后,我继续使用原始字符串,而不是转换后的字符串。
testString := RegExReplace(Hotstring, "[áéiíóöőúüű]", "a")
testString := RegExReplace(Hotstring, "[áéiíóöőúüű]", "a")
if testString is lower
{
ShortString := SubStr(Hotstring,1,1) . SubStr(Hotstring,0)
}else{
ShortString := RegExReplace(Hotstring, "[a-záéiíóöőúüű ]", "")
StringLower,ShortString, ShortString
}
如果你们中的一些人知道一个简单的 switch/option 可以将这些字符正确地内置识别为 high/low,请 post 它。
在那之前,请使用我的解决方法。
与已在 AutoHotkey v2 中被淘汰的 遗留语法 的分离,几乎总能提供更好的解决方案。
了解 POSIX 命名集 和 (*UCP)
here .
以下已经过测试:
If RegExMatch(Hotstring, "(*UCP)^[[:lower:] ]+$")
; or just "(*UCP)^[[:lower:]]+$" if you want to stick with the exact definition of the "lower" type
ShortString := SubStr(Hotstring, 1, 1) SubStr(Hotstring, 0)
Else
ShortString := Format("{:L}", RegExReplace(Hotstring, "(*UCP)[[:lower:] ]+"))
功能相同但更简洁的替代方案:
ShortString := Hotstring ~= "(*UCP)^[\p{Ll} ]+$"
? SubStr(Hotstring, 1, 1) SubStr(Hotstring, 0)
: Format("{:L}", RegExReplace(Hotstring, "(*UCP)[\p{Ll} ]+"))
我有一个代码部分用于检查字符串是否全部为小写。如果是,它会给我第一个和最后一个字符作为缩写。如果不是,它给我大写部分作为缩写。
if Hotstring is lower
{
ShortString := SubStr(Hotstring,1,1) . SubStr(Hotstring,0)
}else{
ShortString := RegExReplace(Hotstring, "[a-záéiíóöőúüű ]", "")
StringLower,ShortString, ShortString
}
问题: 如果我的输入字符串包含中欧字符,则该字符串无法正确识别为小写字母。
我为自己创建了解决方法,首先将特殊字母转换为简单的 lcap 字母 - 只是为了查看完整字符串是否为 lcap。
检查后,我继续使用原始字符串,而不是转换后的字符串。
testString := RegExReplace(Hotstring, "[áéiíóöőúüű]", "a")
testString := RegExReplace(Hotstring, "[áéiíóöőúüű]", "a")
if testString is lower
{
ShortString := SubStr(Hotstring,1,1) . SubStr(Hotstring,0)
}else{
ShortString := RegExReplace(Hotstring, "[a-záéiíóöőúüű ]", "")
StringLower,ShortString, ShortString
}
如果你们中的一些人知道一个简单的 switch/option 可以将这些字符正确地内置识别为 high/low,请 post 它。
在那之前,请使用我的解决方法。
与已在 AutoHotkey v2 中被淘汰的 遗留语法 的分离,几乎总能提供更好的解决方案。
了解 POSIX 命名集 和
(*UCP)
here .
以下已经过测试:
If RegExMatch(Hotstring, "(*UCP)^[[:lower:] ]+$")
; or just "(*UCP)^[[:lower:]]+$" if you want to stick with the exact definition of the "lower" type
ShortString := SubStr(Hotstring, 1, 1) SubStr(Hotstring, 0)
Else
ShortString := Format("{:L}", RegExReplace(Hotstring, "(*UCP)[[:lower:] ]+"))
功能相同但更简洁的替代方案:
ShortString := Hotstring ~= "(*UCP)^[\p{Ll} ]+$"
? SubStr(Hotstring, 1, 1) SubStr(Hotstring, 0)
: Format("{:L}", RegExReplace(Hotstring, "(*UCP)[\p{Ll} ]+"))