如何制作合适的面膜?
How to make the right mask?
我正在检查“无效格式”的有效字符串。
字符串最小长度为5个字符,最大为32(/[a-z\d_\.]{5,32}/
).
出现“无效格式”错误。如果字符串:
- 以三位或更多位数字开头(可接受一位或两位数字);
- 以
_
字符开始和结束;
- 包含一个点,后面以字母开头的字符少于四个。
我写了一个适用于前两个条件的表达式,但我不明白如何实现第三个条件?如果可以的话,再举个单独的表达式的例子,我不太明白用点符号怎么弄。
^(?!(?:_|\d{3,}))[a-z\d_\.]{5,32}(?<!_)$
https://regex101.com/r/W9njMe/1
谢谢。
您可以使用这个正则表达式:
^(?!_|\d{3})(?!.*\.([^a-z]|.{4}))[a-z\d_.]{5,32}(?<!_)$
正则表达式详细信息:
^
: 开始
(?!_|\d{3})
:如果_
是第一个字符或者如果开头有3个数字 则匹配失败
(?!.*\.([^a-z]|.{4}))
:如果点后没有非字母或者点后有4个字符,则匹配失败
[a-z\d_.]{5,32}
: 匹配允许的字符5到32次
(?<!_)
:如果 _
是最后一个字符 ,则否定后视使匹配失败
$
:结束
您可以使用带有断言的模式,当字符串末尾还剩 1-4 个字符时,它与最后一次出现 [a-z]
之后的点不匹配。
^(?!_|\d{3})(?!.*[a-z](?=.{1,4}$)[a-z\d_]*\.)[a-z\d_.]{5,32}$(?<!_)
说明
^
字符串开头
(?!_|\d{3})
断言不是 _
或 3 位数
(?!
否定前瞻,断言右边不是
.*[a-z]
匹配最后一次出现的 [a-z]
(?=.{1,4}$)
断言 1-4 个字符直到字符串结束
[a-z\d_]*\.
匹配匹配一个.
)
关闭前瞻
[a-z\d_.]{5,32}$
匹配字符串中的 5-32 个字符
(?<!_)
断言不 _
向左
我正在检查“无效格式”的有效字符串。
字符串最小长度为5个字符,最大为32(/[a-z\d_\.]{5,32}/
).
出现“无效格式”错误。如果字符串:
- 以三位或更多位数字开头(可接受一位或两位数字);
- 以
_
字符开始和结束; - 包含一个点,后面以字母开头的字符少于四个。
我写了一个适用于前两个条件的表达式,但我不明白如何实现第三个条件?如果可以的话,再举个单独的表达式的例子,我不太明白用点符号怎么弄。
^(?!(?:_|\d{3,}))[a-z\d_\.]{5,32}(?<!_)$
https://regex101.com/r/W9njMe/1
谢谢。
您可以使用这个正则表达式:
^(?!_|\d{3})(?!.*\.([^a-z]|.{4}))[a-z\d_.]{5,32}(?<!_)$
正则表达式详细信息:
^
: 开始(?!_|\d{3})
:如果_
是第一个字符或者如果开头有3个数字 则匹配失败
(?!.*\.([^a-z]|.{4}))
:如果点后没有非字母或者点后有4个字符,则匹配失败[a-z\d_.]{5,32}
: 匹配允许的字符5到32次(?<!_)
:如果_
是最后一个字符 ,则否定后视使匹配失败
$
:结束
您可以使用带有断言的模式,当字符串末尾还剩 1-4 个字符时,它与最后一次出现 [a-z]
之后的点不匹配。
^(?!_|\d{3})(?!.*[a-z](?=.{1,4}$)[a-z\d_]*\.)[a-z\d_.]{5,32}$(?<!_)
说明
^
字符串开头(?!_|\d{3})
断言不是_
或 3 位数(?!
否定前瞻,断言右边不是.*[a-z]
匹配最后一次出现的[a-z]
(?=.{1,4}$)
断言 1-4 个字符直到字符串结束[a-z\d_]*\.
匹配匹配一个.
)
关闭前瞻[a-z\d_.]{5,32}$
匹配字符串中的 5-32 个字符(?<!_)
断言不_
向左