2013-11-08 9 views
0

Я пытаюсь обобщить Regex-java, как если бы я дал значение и шаблон, чем метод должен возвращать true или false if the given value matches the given pattern - TRUE else FALSE.Java - Regex для проверки значения

следующий метод, который я попытался с простым Alphanumeric

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class RegexMatches { 
    public static boolean isValidInput(String value, String pattern) { 
     boolean isValid = false; 
     Pattern walletInputPattern = Pattern.compile(pattern); 
     Matcher walletMatcher = walletInputPattern.matcher(value); 
     if (walletMatcher.matches()) { 
      isValid = true; 
     } 
     return isValid; 
    } 

    public static void main(String args[]) { 
     String pattern = "^[a-zA-Z0-9]*$"; 
     String inputValue = "45645"; 
     if (isValidInput(inputValue, pattern)) { 
      System.out.println("Alphanumeric"); 
     } else { 
      System.out.println("OOPS"); 
     } 
    } 
} 

но я дал неправильный ввод и до сих пор печатает ИСТИНУ ..

, что это ошибка, которую я здесь делать .... ?? ..

спасибо за ваши входы и тратить свое драгоценное время :)

+0

поэтому у вас нужны только цифры, чтобы быть правдой? – CodeFanatic

+0

45645 является буквенно-цифровым и соответствует шаблону – hgoebl

+0

Вы имеете в виду, что регулярное выражение должно содержать * оба * альфа и числовые символы? – Bohemian

ответ

2

это правильный результат, потому что 45645 действительно является буквенно-цифровым значением.

Если вы хотите, чтобы убедиться, что значение представляет собой комбинацию букв и цифр, то вам нужно другое выражение:

String pattern = "^(?!^[0-9]+$)(?!^[a-zA-Z]+$)[a-zA-Z0-9]+$"; 
  • (?!^[0-9]+$): Это гарантирует, что строка не просто сочетание цифр ,
  • (?!^[a-zA-Z]+$): Это гарантирует, что строка не является комбинацией букв.
  • [a-zA-Z0-9]*: Это соответствует комбинации букв и цифр.
+0

это все еще принимает строку только в том случае, если я не даю числа Ex: сниффер, чем он печатает Alphanumeric –

+0

спасибо за ответ, он должен принимать только буквенно-числовые, если значение содержит только строку, чем оно должно возвращать false и наоборот –

+0

@Anto Хорошо, я отредактировал свой ответ. –

3

Я считаю, что это lookahead-based регулярное выражение должно работать для вас:

String pattern = "^(?=.*?[A-Za-z])(?=.*?[0-9])[a-zA-Z0-9]+$"; 

Это гарантирует, что:

  1. Существует по крайней мере один буквенный символ на входе
  2. Там, по крайней мере одна цифра на входе
  3. Ввод состоит из ТОЛЬКО буквенно-цифровых символов
Смежные вопросы