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

Alphanumeric and space regex but no space at start and end of string

我想写一个正则表达式,它可能包含字母或数字或单词之间的 spaces,并且长度必须在 3 到 50 之间,但字符串开头和结尾的长度不能为 spaces。这是我的正则表达式:

/^[^-\s]([a-z0-9]|[a-z0-9\s-]){3,50}[^-\s]+$/i

有效字符串:

uma
umair
umair K

无效字符串:

 uma
u
um
umair 

最后一个示例有一个尾随 space。

您的要求的直译如下:

!/[^a-zA-Z\d\s]/.test(str) &&
str.length >= 3 && str.length <= 50 &&
!/^\s/.test(str) &&
!/\s$/.test(str))

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

^(?=.{3,50}$)[^\W_]+(?: [^\W_]+)*$
  • ^ 断言字符串开头的位置
  • (?=.{3,50}$) 确保行尾前存在 3 到 50 个字符的正向前瞻
  • [^\W_]+ 匹配除 _ 之外的任何单词字符一次或多次
  • (?: [^\W_]+)* 匹配 space 后跟一个或多个单词字符,任意次数
  • $ 断言行尾的位置

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-Z\d ]{1,48}[^\W_]$