正则表达式排除非单词字符但保留空格
Regex to exclude non-word Characters but leave spaces
我正在尝试编写一个 Regex
来阻止在 postcode 字段中输入无效字符的使用。
来自 this link 我像这样排除了所有 "Non-word" 个字符。
Regex regex = new Regex(@"[\W_]+");
string cleanText = regex.Replace(messyText, "").ToUpper();
但这也排除了 "Space" 个字符。
我相信这是可能的,但我发现正则表达式非常混乱!
有人可以帮忙解释一下所使用的正则表达式模式吗?
您可以反转字符 class 使其成为 否定字符 class,如下所示:
[^\sa-zA-Z0-9]+
这将匹配除空格或字母数字字符以外的任何字符。
RegEx Demo(因为这不是 .NET 正则表达式)
假设有效的邮政编码仅包含字母数字字符,您可以将除字母数字和空格之外的任何内容替换为空字符串:
Regex regex = new Regex(@"[^a-zA-Z0-9\s]");
string cleanText = regex.Replace(messyText, "").ToUpper();
请注意 \s
包括制表符、换行符和其他一些不可打印的字符。您可能不想将它们视为有效。遇到这种情况,直接把空格字符逐字列出即可:
[^a-zA-Z0-9 ]
您可以使用 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\d]|_
[ ]
中的 ^
将导致正则表达式查找所有 除了 字母,数字, 和空格。
我正在尝试编写一个 Regex
来阻止在 postcode 字段中输入无效字符的使用。
来自 this link 我像这样排除了所有 "Non-word" 个字符。
Regex regex = new Regex(@"[\W_]+");
string cleanText = regex.Replace(messyText, "").ToUpper();
但这也排除了 "Space" 个字符。
我相信这是可能的,但我发现正则表达式非常混乱!
有人可以帮忙解释一下所使用的正则表达式模式吗?
您可以反转字符 class 使其成为 否定字符 class,如下所示:
[^\sa-zA-Z0-9]+
这将匹配除空格或字母数字字符以外的任何字符。
RegEx Demo(因为这不是 .NET 正则表达式)
假设有效的邮政编码仅包含字母数字字符,您可以将除字母数字和空格之外的任何内容替换为空字符串:
Regex regex = new Regex(@"[^a-zA-Z0-9\s]");
string cleanText = regex.Replace(messyText, "").ToUpper();
请注意 \s
包括制表符、换行符和其他一些不可打印的字符。您可能不想将它们视为有效。遇到这种情况,直接把空格字符逐字列出即可:
[^a-zA-Z0-9 ]
您可以使用 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\d]|_
[ ]
中的 ^
将导致正则表达式查找所有 除了 字母,数字, 和空格。