Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何建立这样的标签系统?_C#_String - Fatal编程技术网

C# 如何建立这样的标签系统?

C# 如何建立这样的标签系统?,c#,string,C#,String,如何建立这样的标签系统 我在asp.NETMVC网站上使用一个独特的文本框来提交“标签” 首先,我尝试用逗号“asp.net,c#,sql server”拆分标记。 它可以工作,但若用户忘记用逗号分隔标签,那个么我就无法拆分该字符串 “asp.net c#sql server”:sql server应该是一个标记,而不是两个“sql”+“server” 此外,我“不能”(他不应该关心这个…)要求用户使用“-”字符来分隔标记的单词:“sql server” 有人帮忙吗?或者将字符串与现有标记匹配,

如何建立这样的标签系统

我在asp.NETMVC网站上使用一个独特的文本框来提交“标签”

首先,我尝试用逗号“asp.net,c#,sql server”拆分标记。 它可以工作,但若用户忘记用逗号分隔标签,那个么我就无法拆分该字符串

“asp.net c#sql server”:sql server应该是一个标记,而不是两个“sql”+“server”

此外,我“不能”(他不应该关心这个…)要求用户使用“-”字符来分隔标记的单词:“sql server”


有人帮忙吗?

或者将字符串与现有标记匹配,这样就可以使用带有空格的标记(假设您首先搜索较大的标记,以便在搜索“sql”之前找到“sql server”。您可以通过只允许使用现有标记,并使用单独的机制来创建新标记,从而使此功能更加强大。这样,用户就可以轻松地创建带有空格的标记,因为在“新标记”框中输入的任何内容都是类似于“sql server 2005”

编辑:

或者,您可以在标记中使用一些特殊语法来创建新的标记:

“sql,asp.net,[NEWTAG]sql server,c#”将使用现有标记“sql”,“asp.net”,“c#”,并将创建一个新标记“sql server”

/编辑

或者在空格上拆分,不允许标记带有空格

在您的示例中,如何区分“sql server”(1个标记)和“sql”“server”(2个标记)之间的区别

如果查看,所有标记都是空格分隔的,那么一个标记就是sql server


只要在用户输入标签时向他们建议标签,我认为这不会有问题。

StackOverflow与用户错误输入标签的问题完全相同,例如,如果您输入了“字符串操纵”而不是“字符串操纵”。您刚刚将标签分隔符从空格改为逗号

根本问题仍然是一样的,因此解决方案也一样也就不足为奇了:

  • 通过网站上的方便帮助教育用户
  • 版主们会帮助其他用户修正错误,清理网站
  • 版主还会在用户犯错时对他们进行教育,以便他们将来不会犯同样的错误

  • StackOverflow证明了该模型可以很好地工作。自动纠正用户错误的解决方案有时会因为您自己指出的模糊性而自身出错。这会让正确操作的人感到沮丧,结果却被软件“修复”所挫败你可以尝试一种统计方法:如果有一堆东西已经标记为“sql server”,它可能会做出有根据的猜测。当然,有时它会出错。

    有一个(很简单)我能想到的方法是允许用户在标记中包含任何字符。解决方案是允许用户一次只输入一个标记。用户可以在文本框中输入标记(现有标记的自动完成是一个明确的加号),在完成输入时按enter键或按钮,输入的标记将显示在应用标记列表的文本框下方。这些应用的标记必须为每个标记都有一个按钮,以便允许用户删除标记

    Wordpress在创建帖子时具有类似的标记机制,但它们允许通过简单地说明标记的分隔符来同时输入多个标记。要求使用分隔符并不是什么大问题,但如果您不想强制使用特定的分隔符,您只需限制用户一次只输入一个标记

    另一个想法(编辑)

    我今天刚读到:

    我的建议:

    首先,在前面,立即选择:你想允许标签的名称中有空格吗?选择其中一个,不要试图创建一些关于用户是否意味着一件事或另一件事的启发式预测的疯狂混乱

    或者:

    sql server
    
    “始终”表示1个标记,或“始终”表示2个标记。只需立即选择您想要的。一个或另一个。如果您选择不允许在标记中使用空格(这意味着它是2个标记),但您还希望允许用户使用逗号分隔标记,例如:

    sql,server
    
    然后,您可以处理用户输入一组混合标签的情况,例如:

    sql server,regular expressions,java c#
    
    代码如下:

    string[] tags = Regex.Split(input, @"(,|\s)+");
    
    这将使你:

    tags[0]: sql
    tags[1]: server
    tags[2]: regular
    tags[3]: expressions
    tags[4]: java
    tags[5]: c#
    

    但是,我该如何用sql和server标记某些东西?(不要说“server sql”)。您应该标记“sql,server”逗号分隔…嗯,你不能同时使用逗号分隔和空格分隔。你必须选择其中一个或另一个。两者都有各自的优点和缺点。正如@bebop指出的,只要你提供一个自动完成的功能,我认为这并不重要。我不知道让用户使用se是一个特定的分隔符。是一个“标记(逗号分隔):”文本框上的标签太多了?我见过的几乎所有标签系统都指定了一些分隔标签的规则。在我的第一个示例中,我用逗号分隔标签,这样我就可以看出区别。但是你自己说,这不是一个好的解决方案。否则,你怎么知道用户提交的“asp.net c#sql server”不是一个标签呢最简单的解决方案是不允许使用空格作为分隔符,或者先为现有标记匹配给定字符串,然后使用单独的机制添加新标记