如何编写匹配仅末尾允许空格的12位字母数字字符串的Regex规则
正则表达式解决方案
你可以使用带正向先行断言的正则实现全部三个校验规则,最终写法如下:
^(?=.{12}$)[0-9a-zA-Z]*\s*$
如果你需要排除全空格的情况,只需要把字母数字的匹配量词从*改为+即可:
^(?=.{12}$)[0-9a-zA-Z]+\s*$
注意:如果需求中的「空格」仅指代普通半角空格,不包含制表符、换行等其他空白字符,可以把上述表达式里的
\s替换为普通空格字符即可。
规则解释
- 正向先行断言
(?=.{12}$):强制匹配字符串总长度恰好为12位,满足第一个要求 [0-9a-zA-Z]*:匹配0个或多个字母、数字,所有非空格字符必须全部出现在前半段\s*:匹配0个或多个空格,所有空格只能出现在字符串末尾,同时整个正则仅允许字母、数字、空格三类字符,同时满足第二、第三个要求
原正则的问题
你之前使用的^[0-9a-zA-Z\s]{12}$仅限定了字符范围和总长度,没有对空格的位置做约束,所以会把中间带空格的12位字符串也判定为合法,不符合第三个规则。
校验示例
合法匹配项
a1B2c3D4e5F6(全字符无空格)test123(7个有效字符+5个末尾空格,总长度12)(全空格,仅在使用第一个正则版本时匹配)
非法不匹配项
a1 b2c3d4e5f(字符串中间存在空格)abc123(总长度不足12位)abc1234567890(总长度超过12位)test@123(包含允许范围外的特殊字符@)
内容的提问来源于stack exchange,提问作者Suraj Pandey
相关产品推荐
相关产品推荐

