正则表达式用于字母数字,空格,短划线和哈希

Hen*_*wan 1 php regex preg-match

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

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

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

Ja͢*_*͢ck 7

首先,你不应该使用^表达边界,因为它们也用于表达锚点; 使用/,~或者#代替.

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

第三,表达式现在只匹配一个字符; 你会想要使用诸如+或的乘数*.

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

/^[ \w#-]+$/
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我把它换成A-Za-z0-9_\w作为一种快捷方式.