我正在尝试验证Qt中LineEdit小部件的输入。我是第一次使用正则表达式,所以我可以使用一些帮助。我想允许1到32个十六进制字节用空格分隔,例如这应该是有效的:
"0a 45 bc 78 e2 34 71 af"
以下是无效输入的一些示例:
"1 34 bc 4e"
- >它们需要成对编写,因此1必须为01。
"8a cb3 58 11"
- > cb3无效。
"56 f2 a8 69 "
- >不允许有尾随空格。
经过一番头疼之后,我想出了这个似乎有效的正则表达式:
"([0-9A-Fa-f]{2}[ ]){0,31}([0-9A-Fa-f]{2})"
现在回答我的问题:
您认为我的测试无法显示的正则表达式有任何问题吗?如果是这样,我该如何改进呢?
有更简洁的方法来写它吗?
提前致谢
答案 0 :(得分:1)
我不确定您使用哪种方法进行验证,但一个可能的问题是该方法在字符串中搜索与模式匹配的子字符串,而不是检查字符串是否与模式匹配。使用exactMatch
验证正则表达式的字符串。
在任何情况下,添加锚点^
和$
都更安全(但在使用exactMatch
时不需要):
"^([0-9A-Fa-f]{2}[ ]){0,31}([0-9A-Fa-f]{2})$"
由于您正在进行验证,因此您无需捕获。而且您不需要在[]
"^(?:[0-9A-Fa-f]{2} ){0,31}[0-9A-Fa-f]{2}$"
您可以使用setCaseSensitivity
方法设置区分大小写。如果将其设置为Qt::CaseInsensitive
,则可以稍微缩短正则表达式:
"^(?:[0-9a-f]{2} ){0,31}[0-9a-f]{2}$"