我正在尝试从文本字段中清除字符串,该字符串将成为sql查询的一部分。
我创建了一个函数:
Private Function cleanStringToProperCase(dirtyString As String) As String
Dim cleanedString As String = dirtyString
'removes all but non alphanumeric characters except @, - and .'
cleanedString = Regex.Replace(cleanedString, "[^\w\.@-]", "")
'trims unecessary spaces off left and right'
cleanedString = Trim(cleanedString)
'replaces double spaces with single spaces'
cleanedString = Regex.Replace(cleanedString, " ", " ")
'converts text to upper case for first letter in each word'
cleanedString = StrConv(cleanedString, VbStrConv.ProperCase)
'return the nicely cleaned string'
Return cleanedString
End Function
但是当我尝试用两个单词清理任何文本时,它会删除所有空格。 “daz的自行车”变成了“Dazsbike”。我假设我需要修改以下行:
cleanedString = Regex.Replace(cleanedString, "[^\w\.@-]", "")
这样它也可以保留单个空格字符。由于我无法在任何在线教程或MSDN网站上找到它(http://msdn.microsoft.com/en-us/library/844skk0h(v=vs.110).aspx)
,因此大家会收到有关如何操作的建议。答案 0 :(得分:3)
使用"[^\w\.,@\-\' ]"
代替您的模式字符串。
另外,我会用
Regex.Replace(cleanedString, " +", " ")
而不是
Regex.Replace(cleanedString, " ", " ")
答案 1 :(得分:1)
或者,如果你不是正则表达式的忠实粉丝......
Private Function cleanStringToProperCase(dirtyString As String) As String
'specify valid characters
Dim validChars As String = " @-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
'removes all but validChars'
Dim cleanedString As String = dirtyString.Where(Function(c) validChars.Contains(c)).ToArray
Dim myTI As Globalization.TextInfo = New Globalization.CultureInfo(Globalization.CultureInfo.CurrentCulture.Name).TextInfo
'return the nicely cleaned string'
Return myTI.ToTitleCase(cleanedString.Trim)
End Function