我想编写一个可能包含字母之间的字母或数字或空格的正则表达式,其长度必须介于3到50之间,而不是字符串开头和结尾的空格。这是我的正则表达式:
/^[^-\s]([a-z0-9]|[a-z0-9\s-]){3,50}[^-\s]+$/i
有效字符串:
uma
umair
umair K
无效的字符串:
uma
u
um
umair
最后一个示例有一个尾随空格。
答案 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))
为什么要在一个正则表达式中填充所有内容?