正则表达式来验证唯一事务标识符
问题描述:
我想写一个正则表达式模式来验证唯一事务标识符(UTI)。请参阅说明:here正则表达式来验证唯一事务标识符
UTI由两个连接的部分组成,前缀和事务标识符。以下是我试图考虑的规则的总结:
- 前缀正好是10个字母数字字符。
- 事务标识符长度为1-32个字符。
- 交易标识符是字母数字,但也允许使用以下特殊字符:
. : _ -
- 特殊字符不能出现在事务标识符的开头或末尾。
- 连续不允许有两个特殊字符。
我迄今构造的模式来验证UTI这些点的第一4(并且忽略壳体匹配的):
^[A-Z0-9]{11}((\w|[:\.-]){0,30}[A-Z0-9])?$
但是我正在与最后一个点挣扎(没有两个连续的特殊字符)。我很乐意承认在正则表达式方面有点新手,我想可能会有一些我不熟悉的更先进的技术来实现这一点。任何正则表达式的大师都在乎照顾我?
解决:感谢用户波希米亚帮助我找到我一直在寻找的模式。我的最终解决方案如下所示:
^[a-zA-Z0-9]{11}((?!.*[.:_-]{2})[a-zA-Z0-9.:_-]{0,30}[a-zA-Z0-9])?$
如果任何人有任何进一步的改进建议,我会留下问题以便随后回答。
答
试试这个:
^[A-Z0-9]{11}(?!.*[.:_-]{2})[A-Z0-9.:_-]{0,30}[A-Z0-9]$
的秘密武器是超前(?!.*[.:_-]{2})
负面看,里面断言(不消耗输入),下面的文字确实不包含2个连续的“特殊”字符.:_-
。
注意你的企图,它采用\w
,允许小写字母和下划线也因为 \w
相同[a-zA-Z0-9_]
+0
谢谢,那就是我一直在寻找的!我做了一个小调整,在上面的编辑中发布我的最终解决方案。 –
你的正则表达式表明字母必须大写。真的吗?小写字母也是“字母数字”。 – Bohemian
@Bohemian:是的,我实际上运行匹配引擎时忽略了启用的套接字,我对此做了一个小小的评论。 –