Php 如何仅允许带preg_匹配的单下划线?

Php 如何仅允许带preg_匹配的单下划线?,php,regex,preg-match,Php,Regex,Preg Match,如何仅允许带preg_匹配的单下划线 下面我制作的正则表达式使用双下划线,这不是我想要的 if(!preg_match('/^[a-z0-9\s\_]+$/', $name)) { $error = true; echo '<error elementid="name" message="name - please use alpha-numbers and lowercaps only." />'; } 将.包含在[]+中可实现倍数

如何仅允许带preg_匹配的单下划线

下面我制作的正则表达式使用双下划线,这不是我想要的

if(!preg_match('/^[a-z0-9\s\_]+$/', $name))
    {
        $error = true;
        echo '<error elementid="name" message="name - please use alpha-numbers and lowercaps only." />';
    }

.
包含在
[]+
中可实现倍数。您需要将其包围在
[]+
中,但不能将其包含在内。整个结构由
()+
包围,以允许它的倍数,但它总是以字母、数字或空格结尾

/^([a-z0-9\s]+_?[a-z0-9]+[a-z0-9\s]+)+$/i
细分:

  • 外部
    ()+
    允许整个结构的倍数
  • [a-z0-9\s]+
    多个字母、数字、空格(非下划线)
  • \uU4[a-z0-9]+
    多个字母/数字/空格内的可选单下划线,但后面不跟空格
  • [a-z0-9\s]+
    末尾有更多的字母、数字和空格(不能以下划线结尾)
  • /i
    不区分大小写(如果需要区分大小写,请删除
    i


抱歉,我刚刚发现不应该包括hellow_uu0;world。可能吗?@lauthiamkok现在怎么样?它变得有点难看,可以从后面看中受益,但效果很好。@lauthiamkok你是否还需要在
\uuuu
之前阻止空格?如果是,请添加另一个
[a-z0-9]+
就在
之前?
谢谢Michael。仍然需要
hello\uuworld
…也许我应该使用更多的if条件?@lauthiamkok不,很抱歉,我答案顶部的表达式与PHP代码中的表达式不同步,它正确地拒绝了
hello\uworld
。Editfail。
/^([a-z0-9\s]+_?[a-z0-9]+[a-z0-9\s]+)+$/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