我想写一个正则表达式,它可以包含字母或数字或单词之间的空格,并且长度必须在 3 到 50 之间,但字符串开头和结尾不能有空格。这是我的正则表达式:
/^[^-s]([a-z0-9]|[a-z0-9s-]){3,50}[^-s]+$/i
有效字符串:
uma
umair
umair K
无效字符串:
uma
u
um
umair
最后一个示例有一个尾随空格。
^(?=.{3,50}$)[^W_]+(?: [^W_]+)*$
^
字符串开头的断言位置(?=.{3,50}$)
积极的前瞻,确保在行尾之前存在 3 到 50 个字符[^W_]+
匹配除_
以外的任何单词字符一次或多次(?: [^W_]+)*
匹配空格后跟一个或多个单词字符的次数任意次数$
断言行尾的位置
var r = /^(?=.{3,50}$)[^W_]+(?: [^W_]+)*$/
var a = [
'uma','umair','umair K', //valid
' uma','u','um','umair ' //invalid
]
a.forEach(function(s){
console.log(r.test(s) ? `Valid: ${s}` : `Invalid: ${s}`)
})
选择:
^[^W_][a-zA-Zd ]{1,48}[^W_]$
需求的直译如下所示:
!/[^a-zA-Zds]/.test(str) &&
str.length >= 3 && str.length <= 50 &&
!/^s/.test(str) &&
!/s$/.test(str))
为什么要将所有内容都塞进一个正则表达式中?