Powershell - 删除除A-Z之外的所有东西,以及使用Regex的空间

时间:2015-11-24 19:04:51

标签: regex powershell

我对PowerShell和regex的编程很新。善良的灵魂可以向我解释为什么以下不起作用?

while($true) {
    $Name = Read-Host "Please enter your firstname and lastname"

    if($Name -match "[^a-zA-Z-]" -and $Name -match " ") {
        break;
    } else {
        Write-Host -ForegroundColor red "You didn't enter a valid name! Please try again."
    }
}

我希望我的代码能够继续询问first和surname,只要它具有非a-z的字符和 - 以及其中的空格。我在这里采取了错误的做法吗?

Woops,应该提到错误。我可以添加数字和特殊符号(例如>< \ ^€等)。当我没有在$ name字符串

中添加空格时,它只给出了else中的错误

2 个答案:

答案 0 :(得分:0)

如果你想匹配一个只有小写和大写拉丁字符和连字符的字符串,这就是你想要的:

^[a-z -]+$

如果你想要连续阻止多个空格,你必须做一些更复杂的事情:

^(?:[a-z-]+ ?)+$

虽然我并不像我想的那样熟悉Bash,所以这可能不完全准确。

如果在该字符类中有任何字符(因为你用^否定它),你检查了什么,只有在这种情况下才返回true。

答案 1 :(得分:0)

如前所述,您需要将+限定符添加到角色类以匹配一个或多个字符。您还需要添加表达式来捕获姓氏。

new Date()