加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何在PHP中“合并”这两个正则表达式?

发布时间:2020-12-13 17:42:33 所属栏目:PHP教程 来源:网络整理
导读:我正在学习正规表达,所以请跟我一起轻松! 如果不以_(下划线)开头且仅包含单词字符(字母,数字和下划线本身),则用户名被视为有效: namespace GremoExtraValidationBundleValidatorConstraints;use SymfonyComponentValidatorConstraint;use SymfonyCo
我正在学习正规表达,所以请跟我一起轻松!

如果不以_(下划线)开头且仅包含单词字符(字母,数字和下划线本身),则用户名被视为有效:

namespace GremoExtraValidationBundleValidatorConstraints;

use SymfonyComponentValidatorConstraint;
use SymfonyComponentValidatorConstraintValidator;

class UsernameValidator extends ConstraintValidator
{
    public function validate($value,Constraint $constraint)
    {
        // Violation if username starts with underscore
        if (preg_match('/^_',$value,$matches)) {
            $this->context->addViolation($constraint->message);
            return;
        }

        // Violation if username does not contain all word characters
        if (!preg_match('/^w+$/',$matches)) {
            $this->context->addViolation($constraint->message);
        }
    }
}

为了在一个正则表达式中合并它们,我尝试了以下内容:

^_+[^w]+$

要读作:如果以下划线(最终多于一个)开头并且如果不允许至少一个字符(不是字母,数字或下划线),则添加违规.例如,不适用于“_test”.

你能帮我理解我错在哪里吗?

解决方法

您可以在第二个正则表达式中添加负前瞻断言:

^(?!_)w+$

现在意味着,尝试匹配整个字符串而不是它的任何部分.该字符串不能以下划线开头,并且可以包含一个或多个单词字符.

See it work

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读