【发布时间】:2021-12-11 06:30:12
【问题描述】:
我正在做一些搜索,发现了一个类似的主题 Powershell find non-ASCII characters in text file
下面的我的函数不能处理所有情况,例如撇号或所有特殊字符
function IsStringDiacritic {
param (
[parameter(Mandatory = $True)][string]$String
)
If ($String -as [System.Net.Mail.MailAddress]) {
$String = $String.Split('@')[0]
}
Return [bool]($String -cmatch '[^\x20-\x7F]')
}
以上是我制作的功能,但我没有得到我需要的功能。
我想发送函数 first.last,如果有变音符号返回 true 或 false。
我的函数能够处理电子邮件地址以及测试然后拆分,但这不是主要部分。
我想我需要一个可以查看 first.last 或 first last 的正则表达式,但我不确定如何包含这些可能性。
有更好的想法吗?
【问题讨论】:
-
如果您需要查找变音符号,为什么要使用匹配除可打印 ASCII 以外的任何字符的模式?使用
-match '\p{M}' -
这里可能有一些东西,但我对你的答案的测试都没有奏效。 @WiktorStribiżew
-
@WiktorStribiżew 指的是 变音符号 的字面定义,它是一个标记,例如 COMBINING DIAERESIS,
U+0308),它修饰另一个字符,通常形成一个重音字符,这可能就是您的意思。\p{M]匹配这样的标记。但是,鉴于此类标记在 .NET 中很少作为单独的[char]实例(Unicode 代码单元)使用,因此很少有用(参见下一条评论)。 -
背景:Unicode有多种等效方式来表示重音字符:作为一个single代码点来表示composed 形式,例如
ä(代码点0xe4)或分解形式:'a',后跟上述分音符('a' + [char] 0x308)。两者 render 相同,-eq识别等价 - 但-match不识别。鉴于重音字符的组合的单码点形式远比分解的双码点形式更常见,匹配\p{M]很少有用,因为它只匹配变音符号,作为一个单独的代码单元 -
看来我的整个问题都是错误的,我对规则的理解并不完整。我需要的是找到一个电子邮件地址是否有
[!#$%^&*(`/?,'' äöüßÄÖÜ)]在我在这里得到所有帮助之后,我做了以下事情。function IsStringSpecialCharacters { param ( [parameter(Mandatory = $True)][string]$String ) $String -match '[!#$%^&*(`/?,'' äöüßÄÖÜ)]' }如果电子邮件地址包含我定义的任何特殊字符,则返回 true。
标签: regex powershell