2011-02-02 20 views
1

我需要幫助,根據這些規則,建立一個正則表達式preg_match構建正則表達式:PHP - 正則表達式:我需要幫助,根據這些規則

  1. 第一和最後的信煤焦/只的數字。
  2. 不允許有空格
  3. char只能是 - letter/digit /' - '/'_'/'。'

法律例子

  1. b.t612_rt
  2. 車轍,是
  3. rut7565

不合法的例子

  1. .btr78; btr78-(第一個/最後一個允許的字符)
  2. start end;星星t結束; (任何空白空間)
  3. tr $ be; TR *室溫; tr/tr ...(不允許字符)

編輯:我刪除了與neigbor字符'_'\' - '\'的4規則。

請幫幫我。

感謝

+4

你爲什麼不嘗試寫一個自己,我們可以幫助你,如果按預期它不工作?如果你要求別人爲你做所有的工作,甚至不先嚐試,你永遠不會學到任何東西。 – meagar 2011-02-02 14:36:51

+0

[RegexBuddy的開源替代品](http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world)列出了一些很好的工具來幫助構建一個正則表達式。 – mario 2011-02-02 14:45:56

回答

2

試試這個:

^[\p{L}\p{N}][\p{L}\p{N}_.-]*[\p{L}\p{N}]$ 

在PHP:

if (preg_match(
    '%^    # start of string 
    [\p{L}\p{N}]  # letter or digit 
    [\p{L}\p{N}_.-]* # any number of letters/digits/-_. 
    [\p{L}\p{N}]  # letter or digit 
    $     # end of the string. 
    %xu', 
    $subject)) { 
    # Successful match 
} else { 
    # Match attempt failed 
} 

最小字符串長度:兩個字符。

+0

謝謝,請參閱我的編輯 – dani 2011-02-02 14:49:16

3

嘗試此正則表達式:

^[A-Za-z0-9]+([-_.][A-Za-z0-9]+)*$ 

這與至少一個字母或數字(^[A-Za-z0-9]+),其可以隨後的-一個,_,或.的零個或更多個序列開頭的任何序列匹配([-_.]),必須至少跟一個字母或數字([A-Za-z0-9]+)。

+0

謝謝,請參閱我的編輯 – dani 2011-02-02 14:45:24

1

那麼,對於您的每一個規則:

  1. 第一和最後一個字母/數字:

    ^[a-z0-9] 
    

    [a-z0-9]$ 
    
  2. 空的空間不允許的(需要什麼,因爲我們正在進行積極的匹配,並且不允許任何空白處):

  3. 只有字母/數字/ -/_ /。

    [a-z0-9_.-]* 
    
  4. 沒有相鄰的符號:

    (?!.*[_.-][_.-]) 
    

因此,所有一起:

/^[a-z0-9](?!.*[_.-][_.-])[a-z0-9_.-]*[a-z0-9]$/i 

,但所有的正則表達式,有多種解決方案,所以嘗試出來.. 。

編輯:您編輯

/^[a-z0-9][a-z0-9_.-]*[a-z0-9]$/i 

你只是刪除了要更改/遠程規則中的部分。就這麼簡單......

1

這似乎對提供的實例很好地工作:$patt = '/^[a-zA-Z0-9]+([-._][a-zA-Z0-9]+)*$/';