在 VB 中,这似乎工作正常:
Dim strlawl As String = "Hello" & vbCrLf & "Goodbye"
Dim lenlawl As Integer = strlawl.Length // = 14
strlawl = strlawl.replace(vbCrLf, vbLf)
lenlawl = strlawl.Length // = 13
我编辑了初始更改以使用字符串函数,因为它们比正则表达式更有效,并且找到换行符并不完全是“模式”。但是,使用 string 方法,您不会像使用 'regex.replace(strlawl, "[\r\n]+", vbLf)' 时那样用一个换行符替换多个换行符
但是,如果您发现在将其带回时需要同时具有换行符和回车符,您将需要使用正则表达式,因为上述字符串函数的逆会非常不稳定。所以:
strlawl = System.Text.RegularExpressions.Regex.Replace(strlawl, "[\r\n]+", Environment.Newline)
是的,为了向后兼容,我确实建议将 \r 和 \n 都保留在那里。另一方面,您很可能甚至不需要重新转换。换行应该导致没有回车的中断。但是,嘿,干净的代码就是干净的。
分解:
[ // Begins a new Character Class
\r // Allow matches for Carriage Return
\n // Also allow matches for Line Feed
]+ // Require at least one, but match as many as possible
进行正则表达式替换有点繁重。这不是一个真正的问题,但如果您的替换不需要模式匹配,那么使用字符串替换是很容易的。话虽这么说,替换功能非常有效,而且并不混乱。
由于多行文本框(或 RTB)的本质就是它们,你将在返回中得到 \r\n,而我知道摆脱它们的唯一方法是用一些东西替换它们。我最初回答这个问题的想法是用管道替换它们,然后在输出时将它们改回来,但我不知道你所有的文本框都接受什么或它们的目的,所以我选择了上述回复的安全路线。
话虽如此,另一种选择可能是:
strlawl.replace(vbCr, Nothing)
但是,如果您希望在返回值中同时包含 CR 和 LF,您最好使用正则表达式来查找任意数量的模式或连续 CR 和/或 LF 的组合,并用 CRLF 或 NewLine 正确替换它们。
话虽如此,您说您有多个页面和多个文本区域。您的网页(代码隐藏)不应与您的数据库有任何连接。他们应该使用数据层。项目中的单独 DLL,或通过 Web 服务访问。至少,在该数据层中,您可以有一个共享的方法来根据需要减少或重新合并换行符。然后txtBox.Text = fix(strValue)
。你会在txtFieldName.DataBound
活动中这样做。
ASP 代码隐藏:
Private Sub txtFieldName_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtFieldName.DataBound
txtFieldName.Text = fix(strValue)
End Sub
你的问题是关于 MVC 虽然,我不是很专业。但这是一个有用的链接。您可以使用以下提示在此处实施我的答案:自定义模型
是的,为了发现一个错误而必须更新大量文本字段可能会很糟糕。但这就是野兽的本性。老实说,我确实希望有人有另一种解决方案。但是错误就是它们。