1つまたは複数のドットで区切ることができる英数字と一致させたい:
- バーティ
- bert.123
- bert.01.03.27
だがしかし :
- .bert (ドットは区切られていません)
- bert123. (ドットは分離していません)
- bert...123 (複数の連続するドット)
今、私はこれ^[^\\.][\w\.]+?[^\\.]$
を持っていますが、ドット文字の複数の連続した出現をまだ処理できません。
あなたが欲しいのは^\w++(\.\w++)*$
少なくとも 1 つの英数字の後に、任意の数の 1 つのドットのみの任意の数のグループが続き、その後に少なくとも 1 つの英数字が続きます。
これはうまくいくはずです:
^(\w+\.)*\w+$
\w
必要に応じて、より制限的なものに置き換えることができます (例: [a-z]
)
Pattern dotSeparated = Pattern.compile("^\\w+(\.\w+)*$");
\w
アンダースコアも使用できるため、必要に応じて[A-Za-z0-9]
または\\p{Alnum}
に置き換え\w
ます。
これは、1 つ以上の英数字の後に 0 個以上の [ドット、その後に 1 つ以上の英数字が続く] が続くものと一致します。
これはうまくいくはずだと思います
boolean ok = !str.matches(".*[^0-9a-zA-Z.].*|\\..*|.*\\.|.*\\.{2,}.*")