PHP - 正则表达式:我需要帮助来根据这些规则构建正则表达式

时间:2011-02-02 14:34:19

标签: php regex

我需要帮助根据这些规则为preg_match构建正则表达式:

  1. 第一个和最后一个字母/数字。
  2. 不允许空白空间
  3. char只能是 - letter / digit /'-'/'_'/'.<
  4. 法律示例

    1. b.t612_rt
    2. 车辙-是
    3. rut7565
    4. 不合法的例子

      1. .btr78; btr78-(第一个/最后一个允许的字符)
      2. 开始结束;明星结束; (任何空白区域)
      3. TR $是; TR *室温; tr / tr ...(不允许使用字符)
      4. 编辑:我删除了4条规则与neigbor chars'_'\' - '\'。'

        请帮帮我。

        由于

4 个答案:

答案 0 :(得分:3)

试试这个正则表达式:

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

这匹配任何以至少一个字母或数字(^[A-Za-z0-9]+)开头的序列,后面可能跟有-_或{{之一的零个或多个序列1}}(.)必须至少跟一个字母或数字([-_.])。

答案 1 :(得分: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
}

最小字符串长度:两个字符。

答案 2 :(得分:1)

嗯,对于你的每条规则:

  1. 第一个和最后一个字母/数字:

    ^[a-z0-9]
    

    [a-z0-9]$
    
  2. 不允许使用空格(不需要任何内容​​,因为我们正在做一个正面匹配并且不允许任何地方有任何空格):

  3. 只有字母/数字/-/_/.

    [a-z0-9_.-]*
    
  4. 没有相邻的符号:

    (?!.*[_.-][_.-])
    
  5. 所以,一起:

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

    但是对于所有正则表达式,有多个解决方案,所以试试吧......

    修改:进行修改

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

    您只需删除要更改/远程规则的部分。就这么简单......

答案 3 :(得分:1)

这似乎适用于提供的示例:$patt = '/^[a-zA-Z0-9]+([-._][a-zA-Z0-9]+)*$/';