代码之家  ›  专栏  ›  技术社区  ›  Marcus L

C语言中的正则表达式问题#

  •  2
  • Marcus L  · 技术社区  · 16 年前

    我正在尝试编写一个正则表达式,它将检查给定字符串是否为“有效”名称。从数据库中检索名称字符串,然后检查它们是否包含奇怪的字符(因为这是一个瑞典的系统,我仍然需要包括一些在瑞典名字中常见的奇怪字符

    问题是,这会使它输入的每一个字符串都失败。我的猜测是正则表达式没有正确终止,如果字符串结尾失败。但我不明白为什么。

    因此,我的正则表达式如下所示——我在示例中尝试了两个正则表达式字符串:

        public static bool NameCheck(string name)
        {
            if(name == "" || name == " " || name == null)
            {
                return false;
            }
    
            //Regex regex = new Regex(@"/^[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+([---\s][a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+)+/i");
            Regex regex = new Regex(@"/^[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+([---\s][a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+)+$/i");
    
            return regex.IsMatch(name);
        }
    

    注意:我通过在正则表达式检查之前分割字符串来解决系统中的问题,这样我就不必处理空白,但我很好奇正则表达式为什么不工作。

    2 回复  |  直到 16 年前
        1
  •  5
  •   Philippe Leybaert    16 年前

    Regex regex = new Regex(@"^[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+([---\s][a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+)+$",
                            RegexOptions.IgnoreCase);
    
        2
  •  1
  •   Alex Brasetvik    16 年前

    [a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]

    所以你永远不会有Bjrn-s或ukasz es?考虑过的 [\w.-] \w 也将与[0-9]匹配,但您始终可以对照第二个正则表达式中的那些进行检查。

    [---\s]

    说什么?那么...怎么样 [\s-] .