我写了正则表达式来选择应该满足以下条件的字母数字字符。
长度应为10,不能包含'-'和空格。
/(^([a-z]|[0-9])*)[-\s]?(([a-z]|[0-9])*)[-\s]?(([a-z]|[0-9])*)$/i
这将满足上述两个条件,但也会选择比10个字母数字还大的字符串。
对此有任何想法。
答案 0 :(得分:2)
通过JavaScript String方法可以更轻松地获得所需的结果。
详细信息:
String.match(RegExp)
-从String
对象提取满足RegExp
对象提供的模式的每个字符。 返回一个包含匹配项的数组。
Array.join(separator)
-使用给定的分隔符将String数组中的每个项目连接起来。
(提取器)
\w+
-匹配 1个或更多重复的字母数字字符。(验证程序)
^
-匹配字符串的开始。
[\-\s]
-匹配'-'
或' '
一次。
\w*
-匹配 0个或更多重复的字母数字字符。
$
-匹配字符串的 end 。
let verify = str => {
if(validator.test(str)) {
let len = str.match(extractor).join('').length;
console.log(len == 10 ? 'Valid!' : 'Invalid!');
} else
console.log('Invalid!');
}
let str1 = '24-carat magic';
let str2 = 'Shape of you';
let extractor = /\w+/g;
let validator = /^\w+[\-\s]\w*[\-\s]\w*$/;
verify(str1);
verify(str2);
答案 1 :(得分:0)
以下应该可以工作:
^[a-z0-9]([^- ]{9}|(?=[^- ]*-[^- ]*$).{10}|(?=[^- ]*-[^- ]*-[^- ]*$).{11}|(?=[^- ]* [^- ]*$).{10}|(?=[^- ]* [^- ]* [^- ]*$).{11})$
这是a-z或0-9的一个字符,后跟一个:
您可以here试试。
当然,这有点可怕,如果可以的话,我不鼓励您使用正则表达式进行验证。
答案 2 :(得分:0)
您可以使用以下正则表达式:
/^(?!(?:.*?[ -]){3,})(?:[a-z0-9][ -]?){1,10}$/
说明:
^
从字符串的开头开始
(?!
开始负面展望
(?:
启动一个非捕获组
.*?
寻找零个或多个字符(非贪心字符)
[ -]
查找受限制的字符
{3,}
查找该组中的3个或更多(负向超前)
(?:
启动一个非捕获组
[a-z0-9][ -]?
匹配一个字符/数字,后跟一个可选的受限字符
{1,10}
匹配该组的1到10
$
匹配字符串的结尾
技巧:使用否定的超前行为将限制字符。
使用'(?:[a-z0-9][ -]?)
'仅会计算字母/数字,而不是受限字符。
答案 3 :(得分:0)
@ rv7在您的答案中添加了额外的检查内容
let verify = str => {
if (validator.test(str)) {
let len = str.match(extractor).join('').length;
if (len === 10) {
if (dashvalidator.test(str)) {
let dashLength = str.match(dashvalidator).join('').length;
if (dashLength === 2) {
console.log('dashvalidator valid')
} else {
console.log('dashvalidator Invalid!');
}
} else {
if (spaceValidator.test(str)) {
str = str.replace(/\s/g, '*');
let spaceLength = str.match(spaceValidatorHelp).join('').length;
if (spaceLength === 2) {
console.log('spaceValidatorHelp valid')
} else {
console.log('spaceValidatorHelp Invalid!');
}
} else {
console.log('valid!');
}
}
} else {
console.log('Invalid!');
}
} else
console.log('Invalid!');
}
let str1 = '24-carat magic';
let str2 = '12 34567 890';
let extractor = /\w+/g;
let validator = /^\w+[\-\s]?\w*[\-\s]?\w*$/;
let dashvalidator = /-/g;
let spaceValidatorHelp = /\*/g;
let spaceValidator = /\s/g;
verify(str1);
verify(str2);
我已经添加了条件检查