2009-11-05 25 views
0

這裏是我的要求: 我知道這個表達式可以簡化 - .NET

  • 這些字符被允許

    • 1-80個字符:
      • 字母數字
      • 空間
      • _ () [ ] ! # , . & * + : '/-

    正則表達式我有下面的作品,但特別是我不知道如何再利用字符類[\w\(\)\.\-\[\]!#,&*+:'\/]

    [\w\(\)\.\-\[\]!#,&*+:'\/][\w\s\(\)\.\-\[\]!#,&*+:'\/]{0,79} 
    

    更新:

    感謝您的答案,這個人做技巧

    ^(?!\s)[\w\s().\-!#&]{1,80}$ 
    
  • 回答

    3

    如果第一個字符不能爲空格試試這個: (?!\s)[-\w\s().[\]\\!#,&*+:'/]{1,80}。你可能想在開始時用「^」括起來,並在結尾^(?!\s)[-\w\s().[\]\\!#,&*+:'/]{1,80}$處用$來表示正則表達式匹配整個字符串。

    +1

    您可以將括號放在'\ s'的周圍。除此之外,我最喜歡這一款。 –

    +0

    噢,你可能想用'^'和'$'來定位它 - 但這是由OP決定的。 –

    +1

    不適用於「測試測試測試」 –

    4

    它真的需要100%的正則表達式嗎?難道你不能只是做

    [\w\s\(\)\.\-\[\]!#,&*+:'\/]{1,80} 
    

    並分別驗證第一個字符不是空白?

    +0

    +1橫向思考。 –

    3

    在一個字符類中,只有]\需要轉義。即使-如果它是班級的第一個字符,也不需要逃跑!

    這裏我可以把它降低到最簡單的正則表達式:

    [- \w().[\]!#,&*+:'/]{1,80} 
    
    +0

    確保您不要對此使用忽略空格標記。 – Geoff

    +0

    此外,這隻會匹配空格(\ 0x20)而不是任何其他空格字符。這可能正是你想要的,但要注意Unicode空間等。 – Geoff

    +0

    '-'也不需要轉義爲類中的最後一個字符:'[a-z-]',或者直接位於範圍:[[a-c-d]'(匹配'a-c',''或'd')之後。如果是類中的第一個字符,即使'''也不需要轉義:'[] a]'匹配']或'a'。 –

    2

    你可以使用一個負面展望檢查第一個字符不是空白。那麼不需要重用一個字符類。

    (?!\s)[\w\s\(\)\.\-\[\]!#,&*+:'\/]{1,80}