字母数字和空格正则表达式但在字符串

时间:2018-03-06 15:39:18

标签: javascript regex spaces alphanumeric

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

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

有效字符串:

uma
umair
umair K

无效的字符串:

 uma
u
um
umair 

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

2 个答案:

答案 0 :(得分: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_]$

答案 1 :(得分:0)

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

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

为什么要在一个正则表达式中填充所有内容?