【发布时间】:2013-05-30 10:37:13
【问题描述】:
我正在尝试让一个正则表达式工作,它允许所有字母数字字符(大写和非大写以及数字)但也允许空格、正斜杠 (/)、破折号 (-) 和加号 (+)?
我一直在玩 refiddle:http://refiddle.com/gqr 但到目前为止还没有成功,有人有什么想法吗?
我不确定这是否有任何区别,但我正在尝试在 c# 中执行此操作?
【问题讨论】:
我正在尝试让一个正则表达式工作,它允许所有字母数字字符(大写和非大写以及数字)但也允许空格、正斜杠 (/)、破折号 (-) 和加号 (+)?
我一直在玩 refiddle:http://refiddle.com/gqr 但到目前为止还没有成功,有人有什么想法吗?
我不确定这是否有任何区别,但我正在尝试在 c# 中执行此操作?
【问题讨论】:
如果您想只允许这些,您还需要使用锚点^ 和$。
^[a-zA-Z0-9_\s\+\-\/]+$
^ ^^
这是您的正则表达式,我添加了第二行所示的字符。不要忘记末尾附近的+ 或* 以允许超过1 个字符(* 的情况下为0 或更多),否则正则表达式将尝试仅匹配一个字符,即使使用@987654327 @。
您也可以将整个班级 [A-Za-z0-9_] 替换为一个 \w,如下所示:
^[\w\s\+\-\/]+$
编辑:
您实际上可以避免一些转义,并通过仔细放置避免最后一次转义(即确保 - 位于开头或结尾):
^[\w\s+/-]+$
【讨论】:
你的正则表达式看起来像:
/[\w\d\/\-\+ ]+/g
这是所有字母、数字、/ - + 和空格(但不是任何其他空白字符)
末尾的 + 表示至少需要 1 个字符。如果要允许空字符串,请将其更改为 *。
【讨论】:
这段代码就是这样做的:
var input = "Test if / this+-works&sec0nd 2 part*3rd part";
var matches = Regex.Matches(input, @"([0-9a-zA-Z /+-]+)");
foreach (Match m in matches) if (m.Success) Console.WriteLine(m.Value);
输出将有 3 个结果行:
【讨论】: