【问题标题】:Powershell - Replace non english letter in a string to english lettersPowershell - 将字符串中的非英文字母替换为英文字母
【发布时间】:2020-07-27 17:42:40
【问题描述】:

我正在 Powershell 中编写一个新脚本,我想问一下是否有人知道将字符串中的所有“非英语”字母替换为英文字母的方法或函数。其原因在于 New-ADUser 功能,其中 AD 只接受 SamAccountName 和 UserPrincipalName 的英文字母。

字符串示例

$Name= "TRẦN NGÔ ỬNG HẠNH"

会有各种非英文字母的名称,包括亚洲、欧洲等,因此使用简单的 If-Then Replace 是不够的。

if ($Name= -like "*Ầ*")
{
$Name = $Name.replace('Ầ','A')
}

【问题讨论】:

  • 我可以建议不要自动处理它,而是使用正则表达式来检查它是否是 a-z A-Z 0-9 并将其交还给输入输入的人。由于几乎有无限的非拉丁字符,其中许多字符无法翻译成英文。因此最好让用户使用适当的错误消息来解决问题。
  • 和另一个旁注,例如像 ÅÄÖ 这样的斯堪的纳维亚字母翻译成两个字符。 Å = AA,Ä = AE,Ö = OE
  • 您好,这是我们的 HR 系统和 AD 之间的集成。人力资源系统的供应商告诉他们不可能将所有用户翻译成英文字母。在我们使用 .replace 之前,但在这种情况下,它仅适用于使用 ØÆÅ 的挪威用户,因此这是一项简单的任务。我可以按照您的建议将其发回,但这将导致更多的员工被送回进行更正,而不是创建的用户。我希望为此提供一个功能,如果没有,我想我将不得不告诉他们事实,他们需要翻译成英文。
  • 看看previous question 是否适合你。正如@DanielBjörk 指出的那样,请注意名称冲突。音译规则复杂且高度依赖文化。此外,请参阅有关 people's names 的常见错误假设列表。

标签: powershell


【解决方案1】:

您好 Daniel Björk 和 vonPryz,

谢谢你的回复,我找到了一个解决方案,我会从建议的链接中找到。 我还阅读了有关人名的文章,在这种情况下,用户仍然可以使用他们的原始名称作为显示名称,但由于 Microsoft 很难在 AD 中使用“英文”字符以外的字符,我们需要转换他们的名字。

解决方案(这将适用于迄今为止测试的亚洲名称)对于斯堪的纳维亚语,我们仍然需要添加一个 .replace。

function Remove-Diacritics {
param ([String]$src = [String]::Empty)
  $normalized = $src.Normalize( [Text.NormalizationForm]::FormD )
  ($normalized -replace '\p{M}', '')
}

$Name = Remove-Diacritics ("TRẦN NGÔ ỬNG HẠNH")


If ($Name -match "[a-z]"){
Write-host "$Name - OK"
}Else{
Write-host "$Name - Send back"
}

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 2013-11-04
    • 2016-10-08
    • 1970-01-01
    • 2011-08-22
    • 2017-11-21
    • 2018-11-13
    • 2017-04-21
    • 1970-01-01
    相关资源
    最近更新 更多