2017-12-22 18 views
0

私はトラブルのパターンマッチングを取得、私は数字または英数字のみを受け付けることができるパターンを生成しようとしています許可されたが「-」と「_」で「-」と「-」がないではない数が許可され、唯一の「-」と「_は」許されるべきではありません。正規表現:数字または英数字のみと「 - 」と「と_'allowedではなく、数 『 - 』と 『 - 』

私はやや細かい作業が、完全に動作する、以下のいずれかを試してみました。私のような例と一致するようにしようとしています

^[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 

を事前

+0

は1つだけを許可しますか?複数の場合は、それらはすべて同じであるか、または1つを混在させることができますか?彼らは最初か最後にいることができますか? – jcaron

+0

には、単一のもこれが数字だけでは動作しません – javed

答えて

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

を入力しないことはできません。 – revo

+0

@revo:確かに、質問ではっきりしていません。 – Toto

+0

私は数字のみのいずれかを受け入れることができた* ...と思うのクリア* – revo

0

あなたは否定先読みから利益を得るように正規表現を探しています: - または_または複数があることができ

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

Live demo

+0

は、 '__'または '----'以外のものだけを削除することができます。 – javed

+0

更新を確認してください。 @ javed – revo

関連する問題