C#文本框许可证密钥自动格式化

pik*_*usp 3 c# regex

我想为用户提供一个花哨的许可证密钥文本框,它会插入破折号.密钥应该是20个字符长(4组,每组5个字符)

我尝试使用正则表达式,首先:

Regex.Replace( text, ".{5}", "$0-" );
Run Code Online (Sandbox Code Playgroud)

这是一个问题,因为即使没有后续字符(例如AAAAA-)插入破折号,也会导致无法删除破折号,因为它会自动重新插入.

然后我想到告诉正则表达式应该有一个跟随字符

Regex.Replace( text, "(.{5})(.)", "$1-$2" );
Run Code Online (Sandbox Code Playgroud)

但是把钥匙分成5-6-6组......

有任何想法吗?

Avi*_*Raj 6

使用负向前瞻以避免-在最后添加.它匹配来自第一个但不是最后5个数字的输入字符串的每个5位数.

.{5}(?!$)
Run Code Online (Sandbox Code Playgroud)

替换字符串

$0-
Run Code Online (Sandbox Code Playgroud)

DEMO

string str = "12345678909876543212";
string result = Regex.Replace(str, @".{5}(?!$)", "$0-");
Console.WriteLine(result);
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

输出:

12345-67890-98765-43212
Run Code Online (Sandbox Code Playgroud)

IDEONE