字母数字和空格正则表达式,但在字符串的开头和结尾没有空格



我想写一个正则表达式,它可以包含字母或数字或单词之间的空格,并且长度必须在 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))

为什么要将所有内容都塞进一个正则表达式中?

最新更新