我仍然是正则表达式的新手。我想用这个规则创建一个正则表达式:
if (preg_match('^[ A-Za-z0-9_-#]^', $text) == 1) {
return true;
}
else {
return false;
}
简而言之,我希望$ text接受文本,数字,空格,下划线,短划线和散列(#)。 上面的reg表达式是否正确?它总是回归真实。
答案 0 :(得分:7)
首先,你不应该使用^
作为表达边界,因为它们也用于表达锚点;请改用/
,~
或#
。
其次,字符集中的破折号应位于最后一个位置;否则它匹配从_
到#
的范围,这可能不是你想要的。
第三,表达式现在只匹配一个字符;您需要使用+
或*
等乘数。
最后,您应该锚定表达式,以便字符串中只包含那些有效字符:
/^[ \w#-]+$/
顺便说一句,我已将A-Za-z0-9_
替换为\w
作为捷径。
答案 1 :(得分:2)
你可以这样做:
\w
代表[a-zA-Z0-9_]
-
在字符类中具有特殊含义,因为它用于定义范围,因此您必须将其放在类的开头或结尾处示例:
if (preg_match('~[\w #-]++~', $subject))
...
else
...