1

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

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

简而言之,我希望 $text 接受文本、数字、空格、下划线、破折号和哈希 (#)。上面的 reg 表达式是否正确?它总是返回 true。

4

2 回答 2

7

首先,您不应该将^其用作表达式边界,因为它们也用于表达式锚点;使用/,~#代替。

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

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

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

/^[ \w#-]+$/

顺便说一句,我已经替换A-Za-z0-9_\w快捷方式。

于 2013-06-12T03:54:31.350 回答
2

你可以这样做:

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

例子:

if (preg_match('~[\w #-]++~', $subject))
     ...
else
     ...
于 2013-06-12T04:03:57.767 回答