我需要为字符串编写一个正则表达式,最大长度为6个字符,只包含小写的拉丁字母,带有可选的下划线分隔符,没有下划线开头和结尾.

我try 了以下几种方法

^[a-z_]{1,6}$

但它允许在开头和结尾加下划线.

我还试过:

^([a-z]_?[a-z]){1,6}$

^(([a-z]+)_?([a-z]+)){1,6}$

^([a-z](?:_?)[a-z]){1,6}$

但这一切都不管用.请帮帮忙.

Expecting:

Valid:

_

Not valid:

_

_

_测试__测试_

推荐答案

我会把你的要求表达为:

^(?!.{7,}$)[a-z](?:[a-z_]*[a-z])*$

此模式与以下内容匹配:

  • 从字符串的开头算起^
  • (?!.{7,}$)断言最多有6个字符
  • [a-z]第一个字母必须是a-z
  • (?:[a-z_]*[a-z])*a-z匹配或在中间加下划线,但仅在结尾匹配a-z
  • $字符串尾

请注意,上述模式的行为是匹配的一个字符只能是字母a-z.同样,两个字符匹配也只能是a-z两次.对于三个或更长的字符匹配,下划线可能出现在中间.

这是跑着跑的demo米.

Php相关问答推荐

如何在数据库中添加注册表单中的动态新行?

PHP Perl正则表达式—URL前面没有等号和可能的单引号或双引号

如何发送woocommerce订单跟踪码与短信

wp_enqueue_scripts not loading(基于类的插件)

PHP:从数组中获取唯一的数字组合

向在添加到购物车上动态创建的WooCommerce产品添加发货类别

使用箭头函数语法时,在回调范围内无法访问变量变量(警告:未定义的变量)

如何修复警告:当使用WordPress get_the_Terms()时,Foreach()参数必须是ARRAY|OBJECT类型?

PHP-带POST验证的for循环

将日期数组排序为年->;月

这是在可召回的背景下吗?

循环中未序列化数组显示的问题

$_SERVER 超全局变量在 PHP 中是否保证可写?

WooCommerce checkout 流程中基于所选选项添加自定义费用

如何使用动态变量定义 bind_result?

docker |管道失败的 ubuntu 源列表

正则表达式 (php) 匹配单个 [ 或单个 ] 但忽略 [[ ]] 之间的任何内容?

PHP / DOM : 解析 HTML 以提取基于类的数​​据

为什么 8.0 之前的 PHP 版本拒绝命名空间Random\Namespace作为无效语法?

Laravel 查询关系是否为 bool