首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非连续字符的正则表达式

非连续字符的正则表达式
EN

Stack Overflow用户
提问于 2020-08-22 09:10:50
回答 2查看 95关注 0票数 0

我正在尝试创建一个正则表达式来验证以下要求:

  • 同时使用西里尔字母和数字是可能的(没有空格和特殊字符)
  • 同时使用拉丁文和数字是可能的(没有空格和特殊字符)
  • 不可能同时使用西里尔字母和拉丁文字符。
  • 第一个字母必须大写,不能是数字。
  • 序列长度-从2位到16位
  • 连续使用3个或更多相同的符号是不可能的。

我使用以下解决方案:(?:([A-Z][A-Za-z0-9]{1,15}|[А-Я][А-ЯЁа-яё0-9]{1,15}))$

如何更改regex以匹配最后一个需求?我使用Google,在这种情况下,不可能使用负面展望。对不起我的英语。

EN

回答 2

Stack Overflow用户

发布于 2020-08-22 11:12:39

我不知道你不能用一个正则表达式来做这件事。

但对于“不要重复同一字符3次”的功能,有一些解决办法。

如果RE2支持反向引用,但是支持它不会,那么解决方案可能会更简单。因此,由此产生的规则将更长。

您可以像这样定义一个列ValidNoThreeRepeats

代码语言:javascript
复制
=
NOT(
    OR(
        AND(MID(A1;1 ;1)=MID(A1;2 ;1);MID(A1;2 ;1)=MID(A1;3 ;1));
        AND(MID(A1;2 ;1)=MID(A1;3 ;1);MID(A1;3 ;1)=MID(A1;4 ;1));
        AND(MID(A1;3 ;1)=MID(A1;4 ;1);MID(A1;4 ;1)=MID(A1;5 ;1));
        AND(MID(A1;4 ;1)=MID(A1;5 ;1);MID(A1;5 ;1)=MID(A1;6 ;1));
        AND(MID(A1;5 ;1)=MID(A1;6 ;1);MID(A1;6 ;1)=MID(A1;7 ;1));
        AND(MID(A1;6 ;1)=MID(A1;7 ;1);MID(A1;7 ;1)=MID(A1;8 ;1));
        AND(MID(A1;7 ;1)=MID(A1;8 ;1);MID(A1;8 ;1)=MID(A1;9 ;1));
        AND(MID(A1;8 ;1)=MID(A1;9 ;1);MID(A1;9 ;1)=MID(A1;10;1));
        AND(MID(A1;9 ;1)=MID(A1;10;1);MID(A1;10;1)=MID(A1;11;1));
        AND(MID(A1;10;1)=MID(A1;11;1);MID(A1;11;1)=MID(A1;12;1));
        AND(MID(A1;11;1)=MID(A1;12;1);MID(A1;12;1)=MID(A1;13;1));
        AND(MID(A1;12;1)=MID(A1;13;1);MID(A1;13;1)=MID(A1;14;1));
        AND(MID(A1;13;1)=MID(A1;14;1);MID(A1;14;1)=MID(A1;15;1))
    )
)

或者以这样一种紧凑的方式:

代码语言:javascript
复制
=NOT(OR(AND(MID(A1;1 ;1)=MID(A1;2 ;1);MID(A1;2 ;1)=MID(A1;3 ;1));AND(MID(A1;2 ;1)=MID(A1;3 ;1);MID(A1;3 ;1)=MID(A1;4 ;1));AND(MID(A1;3 ;1)=MID(A1;4 ;1);MID(A1;4 ;1)=MID(A1;5 ;1));AND(MID(A1;4 ;1)=MID(A1;5 ;1);MID(A1;5 ;1)=MID(A1;6 ;1));AND(MID(A1;5 ;1)=MID(A1;6 ;1);MID(A1;6 ;1)=MID(A1;7 ;1));AND(MID(A1;6 ;1)=MID(A1;7 ;1);MID(A1;7 ;1)=MID(A1;8 ;1));AND(MID(A1;7 ;1)=MID(A1;8 ;1);MID(A1;8 ;1)=MID(A1;9 ;1));AND(MID(A1;8 ;1)=MID(A1;9 ;1);MID(A1;9 ;1)=MID(A1;10;1));AND(MID(A1;9 ;1)=MID(A1;10;1);MID(A1;10;1)=MID(A1;11;1));AND(MID(A1;10;1)=MID(A1;11;1);MID(A1;11;1)=MID(A1;12;1));AND(MID(A1;11;1)=MID(A1;12;1);MID(A1;12;1)=MID(A1;13;1));AND(MID(A1;12;1)=MID(A1;13;1);MID(A1;13;1)=MID(A1;14;1));AND(MID(A1;13;1)=MID(A1;14;1);MID(A1;14;1)=MID(A1;15;1))))

其思想是有一个规则,比较第1,第2和第3字符,然后另一个规则比较第2,第3,第4,第4,第5,等等。您可以使用OR加入这个规则,因为如果其中任何一个匹配,就意味着在某些地方存在一些重复。最后,用NOT否定整个表象。

无法检查regex和该列是否有效。

票数 0
EN

Stack Overflow用户

发布于 2020-08-22 09:17:55

如果你使用的是PHP代码形式的脚本语言,如果我是你的话,我会使用Filter\_var($param1, FILTER\_VALIDATE..., FILTER\_FLAG..)。它让你进入**验证**n*消毒*你的片段。**和平**

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63534503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档