2011-10-18 33 views
0

1 - 我打算用正則表達式來使用這個表達式先驗證用戶名和姓輸入:兩個正則表達式的問題

/^[a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]+$/u 

但是我不希望允許下劃線「_」,不只有空白空間(不能留空)和至少2個字符。我如何將它們應用於上述regEx?

2 - 對於我的強密碼輸入驗證,我需要它是最小的8字符長度 的,它應該包含至少一個字母和非字母的(對於如qsgtest123,qsgtest!@#)

如果您幫助我處理這兩個regExs,我將不勝感激。

+4

perl?促進? C++ 11? JavaScript的? Vim的?你的工具是什麼? *正則表達式*本身並不意味着什麼。 – Benoit

回答

1

這爲名稱

/^(?! +$)[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赫克所有的字符串由的字母(每一個都帶有一個可選的零個或多個組合的標記),或者其它符號在[]

+0

如果用戶只輸入字母怎麼辦?像aaaaaaaaaaaa一樣。你的正則表達式不匹配嗎? – FailedDev

+0

@FailedDev密碼一個?不。第二期望至少尋找一個非字母。 – xanatos

+1

我明白了。很難看到與巨大的角色類:) – FailedDev

1

具有一試:

/^[\p{L},.'-]+[\p{L} ,.'-]*[\p{L},.'-]+$/u 
1
/^((?!_)[a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-])+$/u 

上面應該適用於你的第一個問題。