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

时间:2017-06-13 12:03:15

标签: c# regex regex-negation

我正在尝试编写一个Regex来阻止用户在邮政编码字段中输入无效字符。

来自this link

我管理了以排除所有“非单词”字符,如此。

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

但这也排除了“太空”字符。

我确信这是可能的,但我觉得正则表达式很混乱!

有人可以帮忙解释所使用的正则表达式吗?

4 个答案:

答案 0 :(得分:7)

您可以使用character class subtraction

applicationStarted()

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

答案 1 :(得分:3)

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

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

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

[^a-zA-Z0-9 ]

答案 2 :(得分:0)

您可以将您的角色类反转为使其成为否定角色类,如下所示:

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

这将匹配除空格或字母数字字符之外的任何字符。

RegEx Demo(因为这不是.NET正则表达式)

答案 3 :(得分:0)

此正则表达式将捕获除字母、数字和空格之外的所有内容。

^

[ ] 中的 <textarea class="form-control" type="text" rows="<?= strlen($sometext)/50 ?>" readonly> <?= strip_tags(nl2br($sometext)) ?></textarea> 将导致正则表达式查找所有除了字母、数字和空格。