首页 > 解决方案 > 在PHP中匹配正则表达式中的汉字长度

问题描述

我正在尝试在 php 中执行名称标签的输入检查,名称标签由英文、中文和数字组成。

"/^[A-z0-9\p{Han}]{2,12}$/u";

我想实现一个汉字为2个单位,英文/数字为1个单位的12个字符的名称标签规则。

正则表达式可以匹配这样的规则吗?

举个例子:

六 matches because as of \p{Han} and 2 units
六1 matches because of 0-9, \p{Han}, and 3 units
1 does not match as of 1 unit
一二三四五六七 does not match as of 14 units

标签: phpregexutf-8

解决方案


经过一番修修补补,我有一个解决方案

"/^([A-Za-z0-9]{2}|\p{Han})([A-Za-z0-9]{1,2}|\p{Han}){0,5}$/u";

第一部分([A-Za-z0-9]{2}|\p{Han})匹配 2 个单位,1 个汉字或 2 个 Eng/Num。

紧随其后的([A-Za-z0-9]{1,2}|\p{Han}){0,5}是匹配 0 个单位到 5 个汉字或 10 个 Eng/Num 字符。共12个单位。

感谢您对不应该使用 [Az]的说明


推荐阅读