【问题标题】:Modifying the number input to be specific pattern format?将数字输入修改为特定的模式格式?
【发布时间】:2019-05-04 09:57:10
【问题描述】:

如何使以下代码格式化电话号码以输出结果: +44 123 456 789 而不是 +44 123456789 ?

Function Format-TelephoneNumber {
    Param(
        [Parameter(ValueFromPipeline = $true, Position = 0)]
        [Alias('Number')]
        [string]$TelephoneNumber,
        [Parameter(Position = 1)]
        [string]$DefaultCountryCode = '+44'
    )
    Process {
        $formattedNumber = $TelephoneNumber -replace '[\x09 ]'
        If ($formattedNumber -match '\A(?<CountryCode>\+[1-9]\d|0)(?<Number>\d*)\Z') {
            If ($Matches['CountryCode'] -eq '0') {
                $countryCode = $defaultCountryCode
            }
            Else {
                $countryCode = $Matches['CountryCode']
            }
            $formattedNumber = $countryCode + ' ' + $Matches['Number']
            $formattedNumber
        }
        Else {
            Write-Error "Unable to parse the string '$($number)' as telephone number!"
        }
    }
}

'+33 123456789', '0123456789', '0 123 456 789' | Format-TelephoneNumber

【问题讨论】:

    标签: powershell scripting active-directory windows-scripting


    【解决方案1】:

    这样的事情应该可以工作,只需将值与数组中的范围连接起来:

    Function Format-TelephoneNumber {
        Param(
            [Parameter(ValueFromPipeline = $true, Position = 0)]
            [Alias('Number')]
            [string]$TelephoneNumber,
            [Parameter(Position = 1)]
            [string]$DefaultCountryCode = '+44'
        )
        Process {
            $formattedNumber = $TelephoneNumber -replace '[\x09 ]'
            If (-not ([string]::ISNULLOREMPTY($TelephoneNumber))) {
                If ($formattedNumber -match '\A(?<CountryCode>\+[1-9]\d|0)(?<Number>\d*)\Z') {
                    If ($Matches['CountryCode'] -eq '0') {
                        $countryCode = $defaultCountryCode
                    }
                    Else {
                        $countryCode = $Matches['CountryCode']
                    }
                    $formattedNumber = $countryCode + ' ' 
                    $formattedNumber += -join $Matches['Number'][0..2] + ' '
                    $formattedNumber += -join $Matches['Number'][3..5] + ' '
                    $formattedNumber += -join $Matches['Number'][6..8]
                    $formattedNumber
                }
                Else {
                    Write-Error "Unable to parse the string '$($number)' as telephone number!"
                }
            }
        }
    }
    
    '+33 123456789', '0123456789', '0 123 456 789' | Format-TelephoneNumber
    

    输出:

    +33 123 456 789
    +44 123 456 789
    +44 123 456 789
    

    【讨论】:

    • 欧文,感谢您的精彩回复,效果很好。
    • Owain,那么如何将它与变量一起使用? $adUser.mobile | Format-TelephoneNumber Format-TelephoneNumber : 无法将字符串 '' 解析为电话号码!在 line:39 char:18 + $adUser.mobile | Format-TelephoneNumber + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands。 WriteErrorException,Format-TelephoneNumber
    • 从 $Telephone number 的参数声明中删除 [string] 并重试。
    • 它们中的任何一个都为空吗?在尝试解析它们之前,您可能需要去除任何空值
    • 不,没有任何空值,因为这是 AD 中的电话属性。
    猜你喜欢
    • 2011-11-06
    • 2020-04-29
    • 2011-09-27
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    相关资源
    最近更新 更多