用于字母数字,空格,短划线和散列的正则表达式

时间:2013-06-12 03:49:11

标签: php regex preg-match

我仍然是正则表达式的新手。我想用这个规则创建一个正则表达式:

if (preg_match('^[ A-Za-z0-9_-#]^', $text) == 1) {
    return true;
}
else {
    return false;
}

简而言之,我希望$ text接受文本,数字,空格,下划线,短划线和散列(#)。 上面的reg表达式是否正确?它总是回归真实。

2 个答案:

答案 0 :(得分:7)

首先,你不应该使用^作为表达边界,因为它们也用于表达锚点;请改用/~#

其次,字符集中的破折号应位于最后一个位置;否则它匹配从_#的范围,这可能不是你想要的。

第三,表达式现在只匹配一个字符;您需要使用+*等乘数。

最后,您应该锚定表达式,以便字符串中只包含那些有效字符:

/^[ \w#-]+$/

顺便说一句,我已将A-Za-z0-9_替换为\w作为捷径。

答案 1 :(得分:2)

你可以这样做:

  1. \w代表[a-zA-Z0-9_]
  2. 字符-在字符类中具有特殊含义,因为它用于定义范围,因此您必须将其放在类的开头或结尾处
  3. 如果没有匹配则preg_match函数返回0或发生错误时返回false,因此您不需要测试它是否等于1(您可以使用preg_match返回来执行操作)
  4. 示例:

    if (preg_match('~[\w #-]++~', $subject))
         ...
    else
         ...