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

问题描述 投票:2回答:2

我想写一个可能包含字母之间的字母或数字或空格的正则表达式,其长度必须介于3到50之间,而不是字符串开头和结尾的空格。这是我的正则表达式:

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

有效字符串:

uma
umair
umair K

无效的字符串:

 uma
u
um
umair 

最后一个示例有一个尾随空格。

javascript regex spaces alphanumeric
2个回答
3
投票
^(?=.{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-Z\d ]{1,48}[^\W_]$

0
投票

您的要求的字面翻译如下所示:

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

为什么要把一切都塞进一个正则表达式?

© www.soinside.com 2019 - 2024. All rights reserved.