首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#文本框许可证密钥自动格式化

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

Stack Overflow用户
提问于 2014-08-27 16:05:14
回答 4查看 2.4K关注 0票数 3

我想为用户提供一个花哨的许可证密钥文本框,可以插入破折号。这个键应该有20个字符长(4组5个字符)

我试过使用regex,首先:

代码语言:javascript
复制
Regex.Replace( text, ".{5}", "$0-" );

这是一个问题,因为破折号是插入,即使没有下列字符,例如AAAAA-,结果是无法删除破折号,因为它是自动重新插入。

然后我想告诉regex里面应该有一个字符

代码语言:javascript
复制
Regex.Replace( text, "(.{5})(.)", "$1-$2" );

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

有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-27 16:07:59

使用负前瞻以避免最后添加-。它匹配第一个输入字符串的每个5位数,但不匹配最后5位数字。

代码语言:javascript
复制
.{5}(?!$)

替换串

代码语言:javascript
复制
$0-

演示

代码语言:javascript
复制
string str = "12345678909876543212";
string result = Regex.Replace(str, @".{5}(?!$)", "$0-");
Console.WriteLine(result);
Console.ReadLine();

输出:

代码语言:javascript
复制
12345-67890-98765-43212

依佩恩

票数 6
EN

Stack Overflow用户

发布于 2014-08-27 16:08:25

代码语言:javascript
复制
 .{5}[^$]

使用this.This不会将a-放在末尾。

代之以

代码语言:javascript
复制
  $0-

见演示。

http://regex101.com/r/vY0rD6/3

票数 0
EN

Stack Overflow用户

发布于 2014-08-27 16:20:34

如果你喜欢一种非正则方法的话,你可能会喜欢linq风格的方法.

这可以在LinqPad中运行:

代码语言:javascript
复制
var sourceReg = "abcdeFGHIJ12345klmno";
var splitLength=5;

var regList = Enumerable.Range(0, sourceReg.Length/splitLength).Select(i => sourceReg.Substring(i*splitLength, splitLength));
regList.Dump("Registration List");

var regSeparated = string.Join("-", regList);
regSeparated.Dump("Registration with Separators");

注意:没有考虑到没有正确划分的reg代码。

请参阅上面的方法,以及类似问题中的其他方法:

将分隔符添加到每个N个字符的字符串中?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25531965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档