私はまだ正規表現に非常に慣れていないため、基本的に必要なことは、数字と文字を受け入れるルールを作成することですが、連続した文字を入力することはできません。
例: abcd --> OK、abbcd --> 悪い
私はそれのほとんどを機能させていますが、理解できない部分は、連続した文字を正確に禁止するにはどうすればよいですか?
これまでの私のコード:
/^[A-Za-z-0-9]{8,15}$/i
私はまだ正規表現に非常に慣れていないため、基本的に必要なことは、数字と文字を受け入れるルールを作成することですが、連続した文字を入力することはできません。
例: abcd --> OK、abbcd --> 悪い
私はそれのほとんどを機能させていますが、理解できない部分は、連続した文字を正確に禁止するにはどうすればよいですか?
これまでの私のコード:
/^[A-Za-z-0-9]{8,15}$/i
>>> r = /^((\w)(?!\2))+$/i
>>> r.exec('abbcd')
null
>>> r.exec('abcd')
[ 'abcd',
'd',
'd',
index: 0,
input: 'abcd' ]
パーツは\2
バックリファレンスであり、グループが最後に一致した文字と一致し(\w)
ます。したがって、ネガティブ先読み(?!\2)
は「キャラクター自体が続かない」ことを意味します。ここで使用した用語がよくわからない場合は、MDNの正規表現ドキュメントで調べてください。
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' ]