regex 正则表达式排除非单词字符但保留空格

p1iqtdky  于 2023-06-25  发布在  其他
关注(0)|答案(4)|浏览(143)

我试图写一个Regex来阻止用户在 postcode 字段中输入无效字符。
this link我试图排除所有的“非字”字符像这样。

Regex regex = new Regex(@"[\W_]+");
string cleanText = regex.Replace(messyText, "").ToUpper();

但这也排除了“空间”字符。
我相信这是可能的,但我发现regex非常令人困惑!
有人能帮忙解释一下所使用的正则表达式模式吗?

niwlg2el

niwlg2el1#

您可以反转您的字符类,使其成为取反字符类,如下所示:

[^\sa-zA-Z0-9]+

这将匹配除空格或字母数字字符以外的任何字符。
RegEx Demo(因为这不是.NET正则表达式)

pnwntuvh

pnwntuvh2#

假设有效的邮政编码只包含字母数字字符,您可以用空字符串替换除字母数字和空格之外的任何字符:

Regex regex = new Regex(@"[^a-zA-Z0-9\s]");
string cleanText = regex.Replace(messyText, "").ToUpper();

请注意,\s包括制表符,换行符和其他一些不可打印的字符。您可能不希望将其视为有效。在这种情况下,只需按字面意思列出空白字符:

[^a-zA-Z0-9 ]
5uzkadbs

5uzkadbs3#

这个正则表达式将捕获除字母、数字和空格之外的所有内容。
[^\w\s\d]|_
[ ]中的^将导致正则表达式查找除***字母、数字和空格之外的所有内容。

x7rlezfr

x7rlezfr4#

您可以使用character class subtraction

[\W_-[\s]]+

它匹配一个或多个非单词和下划线符号,但任何空格字符除外。

若要仅排除 * 水平 * 空白字符,请在减法部分使用[\p{Zs}\t]

[\W_-[\p{Zs}\t]]+

要仅排除 * 垂直 * 空白字符(换行符),请在减法部分使用[\n\v\f\r\u0085\u2028\u2029]

[\W_-[\n\v\f\r\u0085\u2028\u2029]]+

非字符类减法解决方案(更便于移植)为

[^\w\s]+

它匹配一个或多个除单词和空白字符以外的字符。请注意,这仍然不会匹配被认为是单词字符的_(这在(?:[^\w\s]|_)+[_\W-[\s]]更可取的字符串标记化场景中很重要)。

相关问题