^(?![\\s\\S]*(\\d{16})|[\\s\\S]*(\\d{9}))[\\s\\S]*
上記の正規表現では、文字列に 10 桁を超える数字を使用できません。たとえば、ユーザーがテスト 1234567891 を入力した場合。テキストは有効なテキストです。ユーザーがこのテキストを入力できるようにする必要があります。ユーザーは、9 桁の数字または 16 桁の数字のみを入力しないでください。たとえば、テスト 123456789 は無効である必要があります。正規表現を変更する方法。
この要件は regexp によって最もよく満たされますか? 文字列の長さを確認する方がはるかに読みやすいと思います。数値があれば。
問題に直面したときに、「分かった、正規表現を使用する」と考える人もいます。現在、彼らには 2 つの問題があります。
ここを参照してください。
この種のチェックには正規表現を使用しないでください。Java には.length()
文字列があります:
private static final Pattern DIGITS = "\\d+";
public boolean inputOK(String input)
{
Matcher m = DIGITS.matcher(input);
int len;
while (m.find()) {
len = m.group().length();
if (len == 9 || len == 16)
return false;
}
return true;
}