我想写一个可能包含字母之间的字母或数字或空格的正则表达式,其长度必须介于3到50之间,而不是字符串开头和结尾的空格。这是我的正则表达式:
/^[^-\s]([a-z0-9]|[a-z0-9\s-]){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-Z\d ]{1,48}[^\W_]$
您的要求的字面翻译如下所示:
!/[^a-zA-Z\d\s]/.test(str) &&
str.length >= 3 && str.length <= 50 &&
!/^\s/.test(str) &&
!/\s$/.test(str))
为什么要把一切都塞进一个正则表达式?