我的用户将在这样的地方输入一些字节。
Yellow arrow points to his input, Orange arrow points to my button
大约半个小时后,我开始意识到这比我想象的要乏味得多。
问题:我是否需要编写数百行代码来确保用户遵守规则?
他的输入中的语法规则是......
- 一个十六进制字节
- 然后一个逗号
- 然后是空白(也许,由他选择)
这三个规则可以根据用户的需要重复使用。对于接收到的字节,还有两个规则需要处理......
- 星号:匹配任意字节数的通配符
- 问号:匹配任意一个字节的通配符
我必须检查一下
- 有效字符(0-9、A-F、大写/小写)
- 两张外卡
?
and *
- 逗号的正确位置
- 没有双逗号
- 适当的空格(例如,数字之间没有空格)
- 异常的空格(例如,他可以在逗号后放置零个、一个或多个空格)
- 可能的单个字符表示一个字节(例如“0”而不是“00”)
这里有些例子..
(首次编辑更新,并非所有用户生来平等;语法检查器必须处理这个问题...)
来自聪明好用户的良好正常、格式整齐的输入......
01, FF, 3E, 27, 7F
55, EE, 01, 00
21, FE, 2B, 00, 1F
37, *, 18, ?, 00, 37
81, *, 00, *, FF, 91, ?, 11, ?, FF
20, 31, 7F, 28, *, FF
47 4F, 20, 50, 4F, 4D, 45, ?, 21
来自愚蠢的坏用户的丑陋的草率输入......
1,ff,3e,27,7f
55, EE, 1, 00
-
21,Fe, 2b,0, 1f
37,*,18,?,00,37
81, *, 0, *,Ff, 91,?,11, ?,FF
20, 31, 7f, 28, *, FF
47, 4F, 20, 50,4F,4D,45, ?,21
(附注,愚蠢的坏用户有时会放入难看的尾随空格,有时会放入难看的前导空格)
天哪,这已经变得毛茸茸的了。我有多达三个嵌套函数,但还远远没有完成。我以为这将是一个 20 分钟的打字练习。
这个问题以前已经解决了吗?
Does 视觉工作室 C#已经包含一个仅要求用逗号分隔的十六进制字节的属性?
我错过了森林里那棵明显的树吗?
StackOverflow 上自动建议的类似问题并没有真正回答这个问题,这让我感到惊讶。当然,我不是第一个遇到这种烦恼的人。欢迎提出建议
您可以使用正则表达式来做到这一点:
String input = "01, FF, 3E, 27, 7F";
String pattern = @"^([0-9A-F]{2},\s?)*[0-9A-F]{2}$";
bool matches = Regex.IsMatch(input, pattern);
正则表达式是^([0-9A-F]{2},\s?)*[0-9A-F]{2}$
这是
^ - 开始
[0-9A-F] - 十六进制字符集
{2} - 该组中的两个字符
, - 只是逗号
\s? - 可选空间
* - 重复0次或多次
注意:如果您想在逗号后强制使用空格,请使用^([0-9A-F]{2},\s)*[0-9A-F]{2}$
注2:如果您只想允许一个字符并允许小写字母,请使用^([0-9A-Fa-f]{1,2},\s)*[0-9A-Fa-f]{1,2}$
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)