2017-10-16 58 views
2

我想写一个正则表达式模式来验证唯一事务标识符(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])?$ 

如果任何人有任何进一步的改进建议,我会留下问题以便随后回答。

+0

你的正则表达式表明字母必须大写。真的吗?小写字母也是“字母数字”。 – Bohemian

+0

@Bohemian:是的,我实际上运行匹配引擎时忽略了启用的套接字,我对此做了一个小小的评论。 –

回答

2

试试这个:

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

的秘密武器是超前(?!.*[.:_-]{2})负面看,里面断言(不消耗输入),下面的文字确实包含2个连续的“特殊”字符.:_-


注意你的企图,它采用\w,允许小写字母和下划线也因为 \w相同[a-zA-Z0-9_]

+0

谢谢,那就是我一直在寻找的!我做了一个小调整,在上面的编辑中发布我的最终解决方案。 –