如何仅使用preg_match?
允许单个下划线我在下面制作的正则表达式采用双下划线,这不是我想要的......
if(!preg_match('/^[a-z0-9\s\_]+$/', $name))
{
$error = true;
echo '<error elementid="name" message="name - please use alpha-numbers and lowercaps only." />';
}
例如,
hello world ok
hello_world ok
hello__world not ok
hello_world__again__ not ok
_hello_world_again_ not ok
答案 0 :(得分:3)
在_
内包含[]+
允许倍数。您需要将其包围在[]+
中,但不要将其包含在内部。整个结构被()+
包围以允许它的倍数,但它总是以字母,数字或空格结尾。
/^([a-z0-9\s]+_?[a-z0-9]+[a-z0-9\s]+)+$/i
打破它:
()+
允许整个结构的倍数[a-z0-9\s]+
多个字母,数字,空格(不是下划线_?[a-z0-9]+
可选单下划线,但后面没有空格[a-z0-9\s]+
末尾有更多字母,数字,空格(不能以下划线结尾)/i
不区分大小写(如果您需要区分大小写,请移除i
)// Updated to prevent space after underscore
$patt = '/^([a-z0-9\s]+_?[a-z0-9]+[a-z0-9\s]+)+$/i';
echo preg_match($patt, 'hello world');
// 1
echo preg_match($patt, 'hello_world');
// 1
echo preg_match($patt, 'hello_world_');
// 0
echo preg_match($patt, 'hello__world');
// 0
echo preg_match($patt, 'hello_world how_are you');
// 1
echo preg_match($patt, 'hello_world how_are you_');
// 0
echo preg_match($patt, 'hello_world__ how_are you_');
// 0
echo preg_match($patt, 'hello_world how_ are you');
// 0