【问题标题】:Comparing database value ignoring duplicate spaces比较数据库值忽略重复空格
【发布时间】:2014-02-13 21:57:04
【问题描述】:

我有一个包含字段Patient Name 的网页。一旦我输入名称,它就会从sql database 获取数据并显示在文本框中输入的成员的agerelation

现在的问题是,如果在数据库中输入数据时间距错误,它会返回零行。

例如

如果数据库中包含姓名Suresh Patel,即姓名和姓氏之间的两个空格,由于数据输入操作员的错误而我在文本框中输入Suresh Patel,即姓名和姓氏之间有一个空格,它没有' t 返回Suresh 的年龄和关系,因为数据库中的值与文本框中的值不匹配,因为数据库值中有额外的间距。

我需要您的帮助来找到一种方法来排除 ALL 文本框和数据库中的空格,同时比较它们。

【问题讨论】:

  • 所有空格还是重复空格?将“Foo___Bar”匹配到“Foo_Bar”可能很有用,但如果删除所有空格,您也会匹配“FooB__ar”
  • 是的,我的意思是第一个。这意味着名字和姓氏之间留有多少空间无关紧要
  • 如果你想忽略所有的空格,这个问题有一个解决方案:stackoverflow.com/questions/2709929/…
  • 好的,所以删除重复的空格 - 明白。
  • yes.. 第二个选项可能是最好的,在数据​​库中输入数据时不会出错。但是由于我想获取到目前为止已经在数据库中的数据,并且没有这样的方法可以确定操作员不会犯错误。所以现在的问题是,如果我写“suresh patel”,即文本框中的单个空格并搜索,并且如果记录包含两个空格,则不会从数据库中获取数据。所以我想要一种从数据库中比较和搜索的方法,不包括数据库中数据的空格和在文本框中输入的名称。现在你明白了吗?

标签: asp.net sql-server tsql


【解决方案1】:

您可以用一个空格替换多个空格。

您可以使用以下代码更新数据库:

string name = "ali  reza"; //get name from data base
name = Regex.Replace(name, @"\s+", " ");

【讨论】:

  • 不明白...如果数据库端存在重复空间怎么办?以上只会管理来自文本框的用户输入,对吗?上面的问题暗示存储在数据库中的数据中有重复空间。您是否建议通过 .net 代码端的正则表达式读取所有数据并进行过滤?
【解决方案2】:

我建议您,在插入成员名称时,您可以使用正则表达式验证器进行精确匹配。下面的正则表达式不允许开头和结尾有空格,也不允许字符串中间有两个连续的空格。也可以看看 http://msdn.microsoft.com/en-us/library/ff650303.aspx

regex = re.compile(
    """^          # Start of string
    (?![ ])       # Assert no space at the start
    (?!.*[ ]{2})  # Assert no two spaces in the middle
    (?!.*[ ]$)    # Assert no space at the end
    [A-Z. ]{8,20} # Match 8-20 ASCII letters, dots or spaces
    $             # End of string""", 
    re.IGNORECASE | re.VERBOSE)

<asp:RegularExpressionValidator runat="server" ErrorMessage="RegularExpressionValidator"></asp:RegularExpressionValidator>

【讨论】:

  • 是的,阿夫南先生。谢谢你的代码。但这对于新条目是可能的。如果我现在添加此代码,则在数据输入期间将不允许任何额外的空格。但是已经输入数据库的数据呢?所以我想要一个解决方案来比较两个值,而不考虑两个值中给出的空间
  • @user3036372 有效参数。那我觉得你应该听从 SPArchaeologist 的指示
  • @AfnanAhmad - 我上面评论中的链接帖子将删除所有空格,而不仅仅是受骗的空格。所以基本上最终“Foo Bar”将等于“FooB ar”
  • FOO BAR 等于 FOOB AR 没关系,因为我只需要比较数据库中仅包含两个单词的名称。但我很想得到代码!如何插入此代码以供我使用?因为数据是从数据库中获取的,然后与文本框中的文本进行比较
  • @user3036372 等等 - 你的意思是你获取所有数据然后在代码端过滤它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
相关资源
最近更新 更多