2011-02-02 43 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]+)*$/';