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