C#中的正则表达式不能按预期工作

C#中的正则表达式不能按预期工作,c#,asp.net,regex,C#,Asp.net,Regex,我有个问题 我希望允许用户在瑞典键盘上写下你能看到的所有东西(不使用字符地图或类似的东西)。这意味着所有英文字母数字字符和åäö。允许的非字母数字字符是§½!“@#·$%&{/()[]=}?+\'`^等等 我的表达是: [\wåäö§½!”@$%&/{()=}?\\\[\]+'''^¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ 在C#中,它看起来是这样的: Regex allowedChars = new Regex("@[\\wåäö§½!\"@#£¤$%&am

我有个问题

我希望允许用户在瑞典键盘上写下你能看到的所有东西(不使用字符地图或类似的东西)。这意味着所有英文字母数字字符和
åäö
。允许的非字母数字字符是
§½!“@#·$%&{/()[]=}?+\'`^
等等

我的表达是:

[\wåäö§½!”@$%&/{()=}?\\\[\]+'''^¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
在C#中,它看起来是这样的:

Regex allowedChars = new Regex("@[\\wåäö§½!\"@#£¤$%&/{()=}?\\\\[\\]+´`^¨~'*,;.:\\-_<>|]");
问题是,如果我写了一个错误的字符和一个允许的字符,if语句会认为它是匹配的。我想让它和整个单词匹配。我试着在表达式的末尾加上一个“+”,但它始终不匹配


有什么想法吗?

你应该锚定正则表达式
^[…]+$
从字符串的开头删除@-你的正则表达式到你的C#等价物是不正确的

@prefix在引号
@“anyStringHere”
之外,它意味着
\
字符被视为字符串中的文本而不是转义字符

此外,我假设您希望匹配仅由允许的字符组成的字符串,如果是这样,您应该锚定您的正则表达式:
^[regexHere]+$
两件事:

  • 字符串中错误地包含
    @
    字符,而不是在字符串之前。这可能是复制粘贴错误,也可能不是

    // put the @ outside the ""
    new Regex(@"[\wåäö§½!""@#£¤$%&/{()=}?\\[\]+´`^¨~'*,;.:\-_<>|]");
    
    //将@放在
    新的正则表达式(@“[\wåäö§½!”“@$%&/{(=}?\[\]+''''^¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨;
    
  • 您只检查是否存在一个允许的字符,而不仅仅是允许的字符。您可以使用锚定和重复来解决此问题:

    // anchor using ^ and $, use []+ to ensure the string is ONLY made
    // up from that character class. Also move the - to be the last symbol
    // to avoid inadvertent ranging
    new Regex(@"^[\wåäö§½!""@#£¤$%&/{()=}?\[\]+´`^¨~'*,;.:\\_<>|-]+$");
    
    //使用^和$定位,使用[]+确保只生成字符串
    //从那个角色班上来。同时移动-作为最后一个符号
    //避免无意中测距
    新的正则表达式(@“^[\wåäö§½!”“@$%&/{()=}?\[\]+'`^¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨;
    

  • 您可以将^紧跟在第一个[]之后。这意味着它将匹配不在集合中的任何字符。然后,对于包含不在列表中的任何字符的字符串,IsMatch将返回True,因此对于有效字符串,它将返回False


    与其检查字符串是否有效,不如检查字符串是否无效。

    您应该使用
    @“
    文本来简化
    \​
    并转义可以匹配的
    $
    ^
    字符。@vcsjones:你在说什么?不管怎样,表达式后面有^和&,但它在字符集中,所以不重要。
    // anchor using ^ and $, use []+ to ensure the string is ONLY made
    // up from that character class. Also move the - to be the last symbol
    // to avoid inadvertent ranging
    new Regex(@"^[\wåäö§½!""@#£¤$%&/{()=}?\[\]+´`^¨~'*,;.:\\_<>|-]+$");