我的问题是我不希望用户键入任何错误,所以我试图将其删除,我的问题是我制作了一个正则表达式,删除除了单词之外的所有内容,并删除。 , - 但我需要这些标志才能让用户满意:D
简短摘要:此脚本使用正则表达式删除输入字段中的错误字符。
输入字段:
$CustomerInbox = New-Object System.Windows.Forms.TextBox #initialization -> initializes the input box
$CustomerInbox.Location = New-Object System.Drawing.Size(10,120) #Location -> where the label is located in the window
$CustomerInbox.Size = New-Object System.Drawing.Size(260,20) #Size -> defines the size of the inputbox
$CustomerInbox.MaxLength = 30 #sets max. length of the input box to 30
$CustomerInbox.add_TextChanged($CustomerInbox_OnTextEnter)
$objForm.Controls.Add($CustomerInbox) #adding -> adds the input box to the window
功能:
$ResearchGroupInbox_OnTextEnter = {
if ($ResearchGroupInbox.Text -notmatch '^\w{1,6}$') { #regex (Regular Expression) to check if it does match numbers, words or non of them!
$ResearchGroupInbox.Text = $ResearchGroupInbox.Text -replace '\W' #replaces all non words!
}
}
错误字符我不想出现:
~ " # % & * : < > ? / \ { | } #those are the 'bad characters'
答案 0 :(得分:3)
要确保文件名有效,您应该使用GetInvalidFileNameChars .NET方法检索所有无效字符并使用正则表达式检查文件名是否有效:
[regex]$containsInvalidCharacter = '[{0}]' -f ([regex]::Escape([System.IO.Path]::GetInvalidFileNameChars()))
if ($containsInvalidCharacter.IsMatch(($ResearchGroupInbox.Text)))
{
# filename is invalid...
}
答案 1 :(得分:2)
$ResearchGroupInbox.Text -replace '~|"|#|%|\&|\*|:|<|>|\?|\/|\\|{|\||}'
或@Wiketor
建议你可以将其排除在'[~"#%&*:<>?/\\{|}]+'
答案 2 :(得分:2)
请注意,如果您要替换无效的文件名字符,可以使用How to strip illegal characters before trying to save filenames?
中的解决方案回答你的问题,如果你有特定的字符,把它们放入一个字符类,不要使用也匹配更多字符的通用\W
。
使用
[~"#%&*:<>?/\\{|}]+
请参阅regex demo
请注意,除了\
之外的所有这些字符都不需要在字符类中转义。此外,添加+
量词(匹配1个或更多个量化子模式)会简化替换过程(匹配整个连续的字符块,并用替换模式(此处为空字符串)一次性替换所有字符)
请注意,您可能还需要考虑con
,lpt1
等文件名。