我必须使用RegEx验证以下类型的表达式的文本值:(必须是8个字符,带有2个连字符和6个字母数字字符。)
我尝试了以下正则表达式模式,但没有用:
/^(\d{1,3})-(\d{1,3})-(\d{1,3})$/
答案 0 :(得分:3)
如果您只想在每个块中使用字母或数字,则可以使用:
^(?=.{8}$)(?:(?:[a-z]+|[0-9]+)(?:-|$)){3}
Demo 。
如果您还想确保字符串同时包含字母和数字,则可以改用以下内容:
^(?=.{8}$)(?=.*[a-z])(?=.*[0-9])(?:(?:[a-z]+|[0-9]+)(?:-|$)){3}
Demo 。
如果我正确理解了您的要求,则可以使用以下方式:
/^(?=.{8}$)[a-z0-9]{1,3}-[a-z0-9]{1,3}-[a-z0-9]{1,3}$/
Demo 。
故障:
^ # The beginning of the string.
(?=.{8}$) # A positive Lookahead to limit the length of the string to exactly 8 chars.
[a-z0-9]{1,3} # One to three alphanumeric (English) characters.
- # Matches the character "-" literally.
$ # The end of the string.
更新:
如果您想避免重复[a-z0-9]{1,3}
部分,则可以使用以下内容:
^(?=.{8}$)(?:[a-z0-9]{1,3}(?:-|$)){3}
...但是该模式不太容易阅读,所以我会坚持使用第一个模式。
答案 1 :(得分:3)
尝试使用带有m
标志的以下正则表达式:
^(?=.{8}$)[^\W_]+(?:-[^\W_]+)+$
如果您需要强制使用数字和字母的组合,请使用以下命令:
^(?=.{8}$)(?![\d-]+$|[a-z-]+$)[^\W_]+(?:-[^\W_]+)+$
答案 2 :(得分:0)
查看所有注释,也许您可以使用另一个断言来确保字符a-z和数字永远不会相邻。
对于最小值和最大值,您可以使用诸如{1,3}
和{1,2}
的量词
^(?=.{8}$)(?![-\d]+$)(?![-a-z]+$)(?![-a-z\d]*(?:\d[a-z]|[a-z]\d))[a-z\d]{1,3}+-[a-z\d]{1,3}-[a-z0-9]{1,2}$
说明
^
字符串的开头(?=.{8}$)
前瞻,断言8个字符,后跟字符串的结尾(?![-\d]+$)
负向查找,不仅要声明连字符和数字。(?![-a-z]+$)
负前行,不仅断言连字符和字符a-z (?!
负向前进,断言右边的不是
[-a-z\d]*
匹配0次以上-
a-z或数字(?:
非捕获组
\d[a-z]|[a-z]\d
匹配后跟a-z的数字或相反的方式)
关闭非捕获组)
近距离否定预测[a-z\d]{1,3}+-[a-z\d]{1,3}-[a-z0-9]{1,2}
使用quantifiers匹配a-z或由连字符分隔的数字$
字符串结尾