3

我是一个真正的正则表达式 n00b,所以我请求你的帮助:我需要一个正则表达式,只匹配字母和数字,排除标点、非 ascii 字符和空格。

“ilikestackoverflow2012”将是一个有效的字符串。

f### 你°§è ”无效。

你好世界”无效

hello-world ”和“ *hello_world* ”无效

等等。

我需要它来使可能复杂的企业名称 url 友好。

提前致谢!

4

7 回答 7

2

要验证字符串,您可以使用以下正则表达式Regex.IsMatch

"^[0-9A-Za-z]+$"

解释:

  • ^是字符串的开始。
  • [...]是一个字符类
  • +表示一个或多个。
  • $是字符串锚的末端。

我需要它来使可能复杂的企业名称 url 友好

然后你想替换不匹配的字符。Regex.Replace与以下正则表达式一起使用:

"[^0-9A-Za-z]+"

解释:

  • [^...]是一个否定字符类。

代码:

string result = Regex.Replace(input, "[^0-9A-Za-z]+" , "");

在线查看它:ideone


请注意,不同的企业名称可能会给出相同的结果字符串。例如,名称仅包含中文字符的企业都将给出空字符串。

于 2012-07-13T14:22:23.590 回答
2
^[0-9a-zA-Z]+$

匹配一个或多个不带空格或非字母字符的字母数字字符。

于 2012-07-13T14:22:50.753 回答
2

您可以使用下面的正则表达式。

^[a-zA-Z0-9]+$

于 2012-07-13T14:24:10.117 回答
2

你不需要正则表达式。

string s = "......"
var isValid = s.All(Char.IsLetterOrDigit);

-

我需要它来使可能复杂的企业名称 url 友好

你也可以使用HttpUtility.UrlEncode

var urlFriendlyString = HttpUtility.UrlEncode(yourString);
于 2012-07-13T14:24:58.783 回答
1

尝试

^[a-zA-Z0-9]+$

www.regexr.com是一个很棒的资源。

于 2012-07-13T14:22:03.467 回答
1

有什么问题[:alnum:]?这是一个posix标准。所以你的整个正则表达式将是:^[:alnum:]+$.

正则表达式的维基百科文章包含大量示例和详细信息。

于 2012-07-13T14:24:18.213 回答
1

试试这个:

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-@#$@#");
于 2012-07-13T14:25:08.713 回答