這爲名稱
/^(?! +$)[a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]{2,}$/u
唯一的區別是「至少2個字符」末和(?! +$)
這意味着「如果只有空間和字符串的結束失敗」。
測試儀:http://gskinner.com/RegExr/?2uv74
而這一次的密碼:
/^(?=.*[a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð])(?=.*[^a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð]).{8,}$/u
(我用您的 「信」 :-)的定義)。這意味着:
look forward if present any character any number of times followed by a "letter"
look forward if present any character any number of times followed by a "non-letter"
(these two look forward don't "move" the regex cursor, that is still at the first character)
match any character 8 or more times
我看你在正則表達式的末尾使用/u
。您可能正在使用Perl。要匹配任何字母,您應該使用\p{L}
(並匹配您應該使用\P{L}
的任何非字母),而不是編寫長長的字符列表。因此,第一個將成爲:
/^(?! +$)[\p{L} ,.'-]{2,}$/u
和密碼之一:
/^(?=.*\p{L})(?=.*\P{L}).{8,}$/u
,我們會忽略的Unicode的組合的變音符號:-)
除非你寧願它們包括...然後
/^(?! +$)(?=.{2,})(\p{L}\p{M}*|[ ,.'-])*$/u
(我們預先檢查缺少所有空格和最小長度,然後我們c赫克所有的字符串由的字母(每一個都帶有一個可選的零個或多個組合的標記),或者其它符號在[]
)
perl?促進? C++ 11? JavaScript的? Vim的?你的工具是什麼? *正則表達式*本身並不意味着什麼。 – Benoit