C#Trim()在我的一个项目中不起作用
我对Asp.Net项目有一个愚蠢的问题,我已经做了5年多了。 今天,Trim()函数突然停止工作 注:C#Trim()在我的一个项目中不起作用,c#,asp.net,C#,Asp.net,我对Asp.Net项目有一个愚蠢的问题,我已经做了5年多了。 今天,Trim()函数突然停止工作 注: 我将项目框架从4.7.2更新到4.8,但问题仍然存在 我试过TrimLeft()和TrimRight()也有同样的Trim()问题 替换功能仍然工作正常,没有受到影响,但它不是一个好的解决方案,我使用它的每一个地方 在新项目上精打细算 我还检查了空间的字符代码,它是32 有什么想法吗 这是密码 string val = "abo "; // "
- 我将项目框架从4.7.2更新到4.8,但问题仍然存在
- 我试过TrimLeft()和TrimRight()也有同样的Trim()问题
- 替换功能仍然工作正常,没有受到影响,但它不是一个好的解决方案,我使用它的每一个地方
- 在新项目上精打细算
- 我还检查了空间的字符代码,它是32
string val = "abo "; // "abo\x0020\x0020\x0020\x0020\x200e"
string userName = val.Trim();
您可以在下面的示例中运行该问题
更新:
感谢大家的评论,我还发现了一个简单的检查来测试字符的结尾,当您将光标设置在末尾并按backspace一次什么都没有发生时,第二次按start删除,这是因为末尾有\x200e字符
你知道如何从左边和右边修剪隐藏的字符,并像处理空格一样处理吗。
String.trim
有效。如果不是这样,16年前成千上万的开发者就会注意到
字符串以格式化字符结尾,特别是\x200e
,即。这绝对不是空白。调用Char.getUnicodeCegory('')返回格式
。我怀疑输入来自阿拉伯语和拉丁语混合文本,可能是用户从较长字符串复制的
处理此问题的一种方法是使用指定LTR标记和其他字符。但这与String.Trim()
不同,后者会删除任何返回true的字符:
另一种选择是使用一个正则表达式,只从开头^[\p{Cf}\s]
或结尾([\p{Cf}\s]+$)修剪空格\s
和Unicode类别Cf
格式的字符:
也许更好的选择是使用输入验证防止意外字符,并要求输入文本框仅包含字母或字母和数字字符。毕竟,用户可以粘贴其他意外的不可打印字符。与其尝试处理所有可能的错误数据,不如警告用户
用户名通常是不带空格的字母和数字组合。所有ASP.NET堆栈都允许验证。现代浏览器直接验证,因此我们可以使用只允许有效字符的正则表达式,例如:
<input type="text" required pattern="[A-Z0-9]' ..../>
非常感谢您完整的解释性回答。目前我的用户是从一个flutter移动应用程序注册的。我们将尝试处理这个问题。然后在API中添加验证。黑客喜欢模糊API,甚至不需要编写任何东西,他们只需使用现成的脚本。ASP.NET应用程序也是如此,但仍然会收到大量的请求/admin.php
。猜猜为什么我有我的验证,而用户不是因为这个问题而创建的,我还将您的解决方案添加到了项目中并更新了我的服务器,非常感谢您为我节省了很多时间。评论不是为了进一步讨论;此对话已经结束。
string userName = Regex.Replace(val,@"(^[\p{Cf}\s]+)|([\p{Cf}\s]+$)","");
<input type="text" required pattern="[A-Z0-9]' ..../>