我是一个真正的正则表达式 n00b,所以我请求你的帮助:我需要一个正则表达式,只匹配字母和数字,排除标点、非 ascii 字符和空格。
“ilikestackoverflow2012”将是一个有效的字符串。
“ f### 你°§è ”无效。
“你好世界”无效
“ hello-world ”和“ *hello_world* ”无效
等等。
我需要它来使可能复杂的企业名称 url 友好。
提前致谢!
要验证字符串,您可以使用以下正则表达式Regex.IsMatch
:
"^[0-9A-Za-z]+$"
解释:
我需要它来使可能复杂的企业名称 url 友好
然后你想替换不匹配的字符。Regex.Replace
与以下正则表达式一起使用:
"[^0-9A-Za-z]+"
解释:
[^...]
是一个否定字符类。代码:
string result = Regex.Replace(input, "[^0-9A-Za-z]+" , "");
在线查看它:ideone
请注意,不同的企业名称可能会给出相同的结果字符串。例如,名称仅包含中文字符的企业都将给出空字符串。
^[0-9a-zA-Z]+$
匹配一个或多个不带空格或非字母字符的字母数字字符。
您可以使用下面的正则表达式。
^[a-zA-Z0-9]+$
你不需要正则表达式。
string s = "......"
var isValid = s.All(Char.IsLetterOrDigit);
-
我需要它来使可能复杂的企业名称 url 友好
你也可以使用HttpUtility.UrlEncode
var urlFriendlyString = HttpUtility.UrlEncode(yourString);
有什么问题[:alnum:]
?这是一个posix标准。所以你的整个正则表达式将是:^[:alnum:]+$
.
正则表达式的维基百科文章包含大量示例和详细信息。
试试这个:
var regex = new Regex(@"^[a-zA-Z0-9]+$");
var test = new[] {"ilikestack", "hello world", "hello-world", "###"};
foreach (var s in test)
Console.WriteLine("{0}: {1}", s, regex.IsMatch(s));
编辑:如果你想要像@Andre_Miller 所说的那样,你应该使用与 Regex.Replace(); 相同的正则表达式;
Regex.Replace(s, @"[^a-zA-Z0-9]+", "")
或者
var regex = new Regex(@"^[a-zA-Z0-9]+$");
regex.Replace("input-string-@#$@#");