正则表达式验证唯一交易标识符

时间:2017-10-16 15:14:52

标签: regex uti unique-transaction-identifier

我正在尝试编写一个正则表达式模式来验证唯一事务标识符(UTI)。请参阅说明:here

UTI由两个连接的部分组成,前缀和事务标识符。以下是我正在考虑的规则摘要:

  • 前缀正好是10个字母数字字符。
  • 交易标识符长度为1-32个字符。
  • 交易标识符是字母数字,但也允许使用以下特殊字符:. : _ -
  • 特殊字符不能出现在事务标识符的开头或结尾。
  • 不允许连续两个特殊字符。

到目前为止,我构建了一个模式来验证UTI中前4个点(与忽略的套管相匹配):

^[A-Z0-9]{11}((\w|[:\.-]){0,30}[A-Z0-9])?$

然而,我正在努力争取最后一点(连续两个特殊字符)。我很乐意承认在正则表达式方面有点新手而且我在想可能有一些我不熟悉的更先进的技术来实现这一目标。那里的任何正则表达专家都在乎开导我吗?

解决:感谢用户Bohemian帮助我找到了我想要的模式。我的最终解决方案如下:

^[a-zA-Z0-9]{11}((?!.*[.:_-]{2})[a-zA-Z0-9.:_-]{0,30}[a-zA-Z0-9])?$

如果有任何进一步的改进建议,我会将问题留待后续回答。

1 个答案:

答案 0 :(得分:2)

试试这个:

^[A-Z0-9]{11}(?!.*[.:_-]{2})[A-Z0-9.:_-]{0,30}[A-Z0-9]$

秘诀是负向前瞻(?!.*[.:_-]{2}),其中断言(不消耗输入)以下文字包含2个连续的“特殊” chars .:_-

请注意,您使用\w的尝试也允许使用小写字母和下划线,因为 \w[a-zA-Z0-9_]

相同