2

私は次の式をmatches関数に入れようとしていますが、ルールをコンパイルしようとするとエラーが発生すると思います。次のように一致(正規表現)を使ってユーザー名を検証する方法は?

^[a-zA-Z](([\._\-][a-zA-Z0-9])|[a-zA-Z0-9])*[a-z0-9]$ 

.validateルールが見えます:

".validate": "newData.val() === auth.uid   
&& newData.val().matches(^(?=.{5,10}$)(?!.*[._-]{2})[a-z][a-z0-9._-]*[a-z0-9]$)" 

私が手:

" Invalid escape: '\.'" 
+0

と一致する(/ ^(?=。{5,10} $)(?!。* [._-] {2})[az] [a-z0-9 ._-] * [a-z0 -9] $ /) – RootHacker

+0

@Pawanでも同じエラーが発生します。 – Relm

+0

@SalmanAAはFirebaseのルールとして一致しますか? – Relm

答えて

1

あなたがFirebaseで前後参照を使用することはできません表示されますので、あなたのパターンと全体的なアプローチがに調整する必要がありますそれを説明する。

あなたの現在の正規表現では、5文字から10文字の文字列の長さが必要です。また、2つの連続するシンボル.,_-は使用できません。第一の条件は、newData.val().length >= 5 && newData.val().length <= 10のようないくつかのコードで正規表現の外にチェックする必要があります2つ目は、ちょうど再グループ化必要とし、再定量:

.matches(/^[a-z][a-z0-9]*([._-][a-z0-9]+)*$/) 

は、正規表現demoを参照してください。

詳細

  • ^ - 文字列の先頭
  • [a-z] - ゼロ以上 - 小文字は
  • [a-z0-9]*(あなたが最後に/iを追加する場合、それは大文字と小文字が区別されます) a-zおよび0-9記号
  • ([._-][a-z0-9]+)* - .,_又は一つ以上で追跡-(これは、.がある場合終わりにされる文字列で_または-[a-z0-9]を必要とする)0-9a-z範囲
  • $から文字 - 文字列アンカーの終わり。 ._は、その内部に特殊な文字ではない、とブラケット表現(文字クラス)の終了または開始時に-がリテラルであるとして、あなたは文字クラス内の文字をエスケープする必要はありません

注意ハイフン。

+1

Frankのパターン^ [a-zA-Z]([\\ ._ \\ - ] [a-zA-Z0-9])| [a-zA-Z0-9])* [a-z0 -9] $ 'は正しいと思われますが、これははるかに多くのバックトラッキングが必要ですが、私の方は線形で、[ループ解消の原則](http://www.softec.lu/site/RegularExpressions/UnrollingTheLoop)に従います。 –

関連する問題