西里尔文和国际字符的正则表达式

时间:2017-04-13 07:24:15

标签: javascript regex

下面列出的这个正则表达式几乎满足了我的所有要求,只有一个缺失:

必须至少包含3个强制字母数字字符,不包括特殊字符

/^(?!(?:[ \d]+|[a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ ]+)$)(?!(.)\1+$)(?!.*([a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ0-9])\2{3})(?!.*[^a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ0-9\n]{2})(?=(?:[^a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ0-9\n]*[a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ0-9]){3})(?!.*[Pp]+(OST|ost)*\.*\s*[Oo0]*(FFICE|ffice)*\.*\s*[Bb]*\.*\s*[Oo0]*\.*\s*[Xx].*)[a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ0-9\ *"(:,\/.\\;&)\[\]_+#'-]{3,40}$/

以下是我的验收标准:

  1. 最少3个字符(包括字母和数字,不包括 包括特殊字符)
  2. 必须至少包含3个强制字母数字字符 特殊字符 - 还没有工作
  3. 所有字母在独立单词中都不能相同。但是,如果 他们是这个词的一部分,我们将允许相同的。例如。 不允许AAA,但允许Haaadoop
  4. 单词中允许小于或等于3的连续字母。 例如。允许Haaadoop,但不允许Haaaadoop
  5. 不允许连续三个或更多个独立字母表。 例如。允许AA,但不允许AAA
  6. 所有数字都可以相同。例如。允许111111111
  7. 不允许超过1个连续的特殊字符(单词或Standalone)。例如。允许A-B,不允许A- -BA-&B
  8. 允许以下特殊字符:#&()_+[]:;',/.-"*
  9. 连续破折号,撇号不允许在任何部分 串
  10. 它也应该接受这些国际和cyrilic字符:ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞߟàáâãäåæçАаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяèéêëìíîïðñòóôõöøùúûüýþÿ
  11. 应接受这些国际和cyrilic字符 单词的开头或单词之间或单词的结尾 字
  12. 应接受以下测试用例

    • Haaadoop 123
    • A-B 123
    • 123 âãäåæçèéêëìíî
    • нОоСсТт 123
    • 123 нОоСсТт
    • нОр123Тт
    • 123 Haaadoop
    • 123 A-B
    • âãäåæçèéêëìíî 123
    • âãäåæ123çèéêëìíî
    • 111 asdasdbhb
    • 1111 asdwebqfbwejbf
    • âãäåæçèéêëìíî 123
    • 1111111111 adfsdfdsf

    应拒绝以下测试用例:

    • Haaaaadoop 123
    • A- -B 123
    • A-&B123
    • AAA
    • abcd
    • 123
    • 123 Haaaaadoop
    • 123 A- -B
    • 2 a

1 个答案:

答案 0 :(得分:0)

注1:重新编号为参考的标准

注2:我最初会使用PCRE语法来支持x修饰符。 JavaScript风格的正则表达式将在帖子的末尾出现。

几乎从字面上来说,您的标准可以表示如下(评论中的标准参考):

^
(?=(?:.*[a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ0-9]){3,})  # 1 & 2
(?!.*\b([a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ])\1+\b)    # 3
(?!.*  ([a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ])\2{3,})   # 4
(?!     [a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ]{3,}$)     # 5
(?=([0-9])\3+$|(?!\d+$))                        # 6 + implied by the test data "no number
                                                # alone on a string unless all digits are
                                                # the same" rule
(?!.*[\ *"(:,\/.\\;&)\[\]_+#'-]{2,})            # 7
[a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ0-9\ *"(:,\/.\\;&)\[\]_+#'-]{3,40}$

正则表达式不包括"邮局"限制出现在原始表达式中,因为它在标准列表中缺失但可以轻松添加。

演示:https://regex101.com/r/DOM8C0/1

JavaScript版本:

^(?=(?:.*[a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ0-9]){3,})(?!.*\b([a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ])\1+\b)(?!.*([a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ])\2{3,})(?![a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ]{3,}$)(?=([0-9])\3+$|(?!\d+$))(?!.*[\ *"(:,\/.\\;&)\[\]_+#'-]{2,})[a-zA-ZÀ-ÖØ-ߟà-çа-яА-ЯЁёè-ÿ0-9\ *"(:,\/.\\;&)\[\]_+#'-]{3,40}$

演示:https://regex101.com/r/8eCYCy/1