2015-10-20 15 views
3

Я ищу некоторую помощь, чтобы получить регулярное выражение для Android, которое предотвращает больше одного ведущего нуля в заданном десятичном числе. В настоящее время любое количество нулей может быть добавлено до фактической цифры. Я ищу поддержку чисел вроде 0.1, 11.04, 0129. Числа, которые не должны быть разрешены в +0,9, 0009999,33, 0007Regex/Input Filter для android для предотвращения более чем одного ведущего нуля

Существующий класс фильтра, приводится ниже:

public class DecimalDigitsInputFilter implements InputFilter{ 

Pattern mPattern; 
int maxDigitsBeforeDecimalPoint = 10; 
int maxDigitsAfterDecimalPoint = 2; 

public DecimalDigitsInputFilter(int digitsBeforeZero, int digitsAfterZero) 
{ 
    this.maxDigitsBeforeDecimalPoint = digitsBeforeZero; 
    this.maxDigitsAfterDecimalPoint = digitsAfterZero; 
} 

@Override 
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, 
     int dend) 
{ 
    StringBuilder builder = new StringBuilder(dest); 
    builder.replace(dstart, dend, source.subSequence(start, end).toString()); 
    if(!builder.toString().matches(
      "(([0-9]{1})([0-9]{0," + (maxDigitsBeforeDecimalPoint - 1) + "})?)?(\\.[0-9]{0," 
        + maxDigitsAfterDecimalPoint + "})?")) 
    { 
     if(source.length() == 0) 
      return dest.subSequence(dstart, dend); 
     return ""; 
    } 
    return null; 
}} 

Заранее спасибо.

+0

что-то вроде этого '^ \\ .. * |^[0] {2} *'.? – SomeJavaGuy

+0

см. [Здесь] (http://pastebin.com/WchkxhgD) – pskink

ответ

0

Регулярное выражение, которое позволяет флоат/целое число без 2-х или более ведущих нулей:

^(?!0{2,})\d+(?:\.\d+)?$ 

См regex demo

На самом деле, это достаточно, чтобы проверить только 2 0 с в начале (хотя это просто дело вкуса):

^(?!0{2})\d+(?:\.\d+)?$ 
    ^

В Android, вы можете использовать следующее регулярное выражение заявление с matches():

String pattrn = "^(?!0{2,})\\d+(?:\\.\\d+)?"; 

См IDEONE demo

регулярное выражение разбивку:

  • ^(?!0{2,}) - в начале, проверяет следующие символы не являются 2 или более 0 s
  • \\d+ - 1 или больше цифр
  • (?:\\.\\d+)? - 1 или 0 последовательности
    • \\. - буквальный период
    • \\d+ - 1 или более цифр

 Смежные вопросы

  • Нет связанных вопросов^_^