正则表达式:要么只有数字或字母数字带' - '和'_'允许但不带数字' - '和' - '

问题描述 投票:0回答:2

我遇到麻烦模式匹配,我试图生成模式,可以接受只有数字或字母数字与'-'和'_'允许但不是数字与'-'和'-'允许,只有'-'和'_ '不应该被允许。

我试过下面的一个有点工作但完全正常工作。

^[a-zA-Z0-9][a-zA-Z0-9-_]+$

我试图匹配以下情况:

abcd = OK
as123 = Ok
as_as = Ok
as_12 = Ok
as-as = ok
12as = Ok
12_1as = Ok
123_12 = not Ok
12-12 = not Ok
1234 = ok
-- = not ok
__ = not ok

提前致谢

javascript regex pattern-matching
2个回答
1
投票

这样做的工作:

var test = [
    'abcd',
    'as123',
    'as_as',
    'as_12',
    'as-as',
    '12as',
    '12_1as',
    '123_12',
    '12-12',
    '1234',
    '--',
    '__',
];
console.log(test.map(function (a) {
  return a+' : '+/^(?!\d+[-_]\d+$)[a-z0-9]+[-_]?[a-z0-9]+$/i.test(a);
}));

说明:

^           : begining of string
  (?!       : negative lookahead, make sure we don't have
    \d+     : 1 or more digits
    [-_]    : - or _
    \d+     : 1 or more digits
    $       : end of string
  )         : end lookahead
  [a-z0-]+  : 1 or more alphanumeric character
  [-_]?     : optional - or _
  [a-z0-]+  : 1 or more alphanumeric character
$           : end of string

0
投票

您正在寻找这样的正则表达式,它可以从负面的前瞻中受益:

^(?!\d*(?:[-_]+\d*)*$)[\w-]+$

Live demo

© www.soinside.com 2019 - 2024. All rights reserved.