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