2012-04-25 19 views
5

私はまだRegexの新機能で、基本的には数字と文字を受け入れるルールを作成しますが、連続する文字は入力できません。例えば正規表現を拒否する連続した文字

:ABCD - > [OK]を、abbcd - >悪い

私は仕事にそれのほとんどを持っていますが、私は把握カントの部分は、私は連続した文字を禁止します正確にどのようにでしょうか?

マイコードこれまで:

/^[A-Za-z-0-9]{8,15}$/i 
+0

最初に私は、zと0の間にマイナス記号はアンダーライン、それはそうだ場合だと思いますあなたは '[A-Za-z_0-9]'の代わりに '[\ w]'を使うのが好ましいでしょう。 – shift66

答えて

4
>>> r = /^((\w)(?!\2))+$/i 
>>> r.exec('abbcd') 
null 
>>> r.exec('abcd') 
[ 'abcd', 
    'd', 
    'd', 
    index: 0, 
    input: 'abcd' ] 

\2一部はグループ(\w)で最後にマッチした方の文字、バックリファレンスと一致しています。だから、否定的な先読み(?!\2)は、 "文字自体に従っていない"という意味です。私がここで使用した用語の中にあなたには馴染みのないものがある場合は、MDN's Regular Expression Documentationで検索してください。 、OPのように8-15文字まで受け入れられた文字列の長さを制限{8,15}+を変更するには

>>> r = /^((\w)(?!\2)){8,15}$/i 
>>> r.exec('abcd') 
null 
>>> r.exec('abcdabcd') 
[ 'abcdabcd', 
    'd', 
    'd', 
    index: 0, 
    input: 'abcdabcd' ] 
+0

この回答のことは、ユーザーが最低8文字を入力しなければならないという制限ルールを削除したということです – shade917

+0

@ shade917:これを達成するために '+ '記号を' {8,15} 'に変更することができます。 –

+0

おかげで多くの人、これは私のために完璧に動作します! – shade917

関連する問題