Javascript RegEx:用于限制字母数字字符的总长度,包括所有组
我已经编写了正则表达式,用于选择应满足以下条件的字母数字字符Javascript RegEx:用于限制字母数字字符的总长度,包括所有组,javascript,regex,Javascript,Regex,我已经编写了正则表达式,用于选择应满足以下条件的字母数字字符 它可以从a-z或0-9开始 它最多可以有两个“-”或两个空格字符 长度应为10,不包括“-”和空格 /(^([a-z]|[0-9])*)[-\s]?(([a-z]|[0-9])*)[-\s]?(([a-z]|[0-9])*)$/i 这将满足上述两个条件,但它也将选择10个字母数字以上的字符串 对此有任何想法。以下方法应该有效: ^[a-z0-9]([^- ]{9}|(?=[^- ]*-[^- ]*$).{10}|(?=[^- ]*
/(^([a-z]|[0-9])*)[-\s]?(([a-z]|[0-9])*)[-\s]?(([a-z]|[0-9])*)$/i
对此有任何想法。以下方法应该有效:
^[a-z0-9]([^- ]{9}|(?=[^- ]*-[^- ]*$).{10}|(?=[^- ]*-[^- ]*-[^- ]*$).{11}|(?=[^- ]* [^- ]*$).{10}|(?=[^- ]* [^- ]* [^- ]*$).{11})$
即a-z或0-9的一个字符后跟以下任一字符:
- 9个既不是空格也不是破折号的字符
- 10个字符,其中一个是破折号,没有一个是空格
- 11个字符,正好有两个是破折号,没有一个是空格
- 10个字符,其中一个是空格,没有一个是破折号
- 11个字符,正好有两个是空格,没有一个是破折号
当然,这一切都有点糟糕,如果您能帮忙的话,我会劝阻您不要使用正则表达式进行验证。以下应该可以:
^[a-z0-9]([^- ]{9}|(?=[^- ]*-[^- ]*$).{10}|(?=[^- ]*-[^- ]*-[^- ]*$).{11}|(?=[^- ]* [^- ]*$).{10}|(?=[^- ]* [^- ]* [^- ]*$).{11})$
即a-z或0-9的一个字符后跟以下任一字符:
- 9个既不是空格也不是破折号的字符
- 10个字符,其中一个是破折号,没有一个是空格
- 11个字符,正好有两个是破折号,没有一个是空格
- 10个字符,其中一个是空格,没有一个是破折号
- 11个字符,正好有两个是空格,没有一个是破折号
当然,这有点糟糕,如果您能帮助的话,我会劝阻您不要使用正则表达式进行验证。通过JavaScript字符串方法可以更容易地实现所需的结果 详细信息:
- -从
对象中提取满足字符串
对象提供的模式的每个字符返回包含匹配项的数组RegExp
- -使用给定的分隔符连接字符串数组中的每个项
-匹配1个或多个重复的字母数字字符\w+
-匹配字符串的开头^
-匹配[\-\s]
或'-'
一次'
-匹配0个或更多重复的字母数字字符\w*
-匹配字符串的结尾$
let verify=str=>{
if(验证器测试(str)){
让len=str.match(提取器).join(“”).length;
log(len==10?'Valid!':'Invalid!');
}否则
console.log('Invalid!');
}
让str1=‘24克拉魔法’;
让str2=‘你的形状’;
让提取器=/\w+/g;
让验证器=/^\w+[\-\s]\w*[\-\s]\w*$/;
验证(str1);
验证(str2)代码>通过JavaScript字符串方法可以更容易地实现所需的结果
详细信息:
- -从
字符串
对象中提取满足RegExp
对象提供的模式的每个字符返回包含匹配项的数组
- -使用给定的分隔符连接字符串数组中的每个项
(提取器)
\w+
-匹配1个或多个重复的字母数字字符
(验证器)
^
-匹配字符串的开头
[\-\s]
-匹配'-'
或'
一次
\w*
-匹配0个或更多重复的字母数字字符
$
-匹配字符串的结尾
let verify=str=>{
if(验证器测试(str)){
让len=str.match(提取器).join(“”).length;
log(len==10?'Valid!':'Invalid!');
}否则
console.log('Invalid!');
}
让str1=‘24克拉魔法’;
让str2=‘你的形状’;
让提取器=/\w+/g;
让验证器=/^\w+[\-\s]\w*[\-\s]\w*$/;
验证(str1);
验证(str2)代码>您可以使用以下正则表达式:
/^(?!(?:.*?[ -]){3,})(?:[a-z0-9][ -]?){1,10}$/
说明:
^
从字符串开头开始
(?!
开始负面展望
(?:
启动非捕获组
*?
查找任何字符中的零个或多个字符(非贪婪)
[-]
查找受限字符
{3,}
查找该组中的3个或更多(负前瞻)
(?:
启动非捕获组
[a-z0-9][-]?
匹配一个字符/数字,后跟可选的受限字符
{1,10}
匹配该组的1到10
$
匹配字符串的结尾
诀窍:使用neagtivelookahead将限制字符数
使用“(?:[a-z0-9][-]?)
”将只计算字母/数字,而不是限制字符。您可以使用以下正则表达式:
/^(?!(?:.*?[ -]){3,})(?:[a-z0-9][ -]?){1,10}$/
说明:
^
从字符串开头开始
(?!
开始负面展望
(?:
启动非捕获组
*?
查找任何字符中的零个或多个字符(非贪婪)
[-]
查找受限字符
{3,}
查找该组中的3个或更多(负前瞻)
(?:
启动非捕获组
[a-z0-9][-]?
匹配一个字符/数字,后跟可选的受限字符
{1,10}
匹配该组的1到10
$
匹配字符串的结尾
诀窍:使用neagtivelookahead将限制字符数
使用“(?:[a-z0-9][-]?)
”将只计算字母/数字,而不是限制字符。