我有个问题。

我希望允许用户在瑞典语键盘上写下您能看到的所有内容(不使用字符映射或类似内容)。这意味着所有英文字母数字字符和 åäö 。允许的非字母数字字符是 §½!"@#£¤$%&{/()[]=}?+\´`^ 等。

我的表达是:

[\wåäö§½!"@#£¤$%&/{()=}?\\\[\]+´`^¨~'*,;.:\-_<>|]

在 C# 中,它看起来像这样:
Regex allowedChars = new Regex("@[\\wåäö§½!\"@#£¤$%&/{()=}?\\\\[\\]+´`^¨~'*,;.:\\-_<>|]");

我检查它:
if (allowedChars.IsMatch(mTextBoxUserName.Text.Trim()))

问题是,如果我写了一个错误的字符和一个允许的字符,if 语句认为它匹配。我希望它与整个单词相匹配。我尝试在表达式的末尾添加一个“+”,但它从未匹配过...

有任何想法吗?

最佳答案

两件事情:

  • 您的字符串错误地将 @ 字符包含在字符串内部而不是字符串之前。这可能是复制粘贴错误,也可能不是。
    // put the @ outside the ""
    new Regex(@"[\wåäö§½!""@#£¤$%&/{()=}?\\[\]+´`^¨~'*,;.:\-_<>|]");
    
  • 您只是在检查 是否存在一个 允许的字符,而不仅仅是允许的字符。你可以使用 anchor 定和重复来解决这个问题:
    // 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åäö§½!""@#£¤$%&/{()=}?\[\]+´`^¨~'*,;.:\\_<>|-]+$");
    
  • 关于c# - C# 中的 RegEx 无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8564844/

    10-13 09:23