Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void setTexts() {
- Locale locale = getLocale();
- singInLabel.setValue(messageSource.getMessage("login.singInLabel", null, locale));
- loginTextField.setCaption(messageSource.getMessage("login.login", null, locale));
- loginTextField.setValue("Ext-N.Ovcharenko");
- passwordTextField.setCaption(messageSource.getMessage("login.password", null, locale));
- forgotLink.setCaption(messageSource.getMessage("login.forgot", null, locale));
- singInButton.setCaption(messageSource.getMessage("login.singIn", null, locale));
- TextField phoneNumberField = new TextField("phone number");
- String patternPhoneExtended = "^\\+7 \\d{3} \\d{3}-\\d{2}-\\d{2}$";
- Pattern patternPhoneSimple = Pattern.compile("^(8|\\+?7)\\d{10}$");
- phoneNumberField.addValidator(new RegexpValidator(patternPhoneExtended, messageSource.getMessage("fieldPhoneFormat", null, locale)));
- phoneNumberField.addTextChangeListener(textChangeEvent -> {
- String eventString = textChangeEvent.getText();
- String val = phoneNumberField.getValue();
- System.out.println("txt val/event: " + val + " / " + eventString);
- phoneNumberField.setValue(eventString.replaceAll("[\\+ ()-]", ""));
- int delta = countCursorOffset(eventString, phoneNumberField.getCursorPosition());
- System.out.print("cursor: " + phoneNumberField.getCursorPosition() + " -> ");
- System.out.print("(" + (delta > 0 ? "+" : "") + delta + ") -> ");
- phoneNumberField.setCursorPosition(phoneNumberField.getCursorPosition() + delta);
- System.out.println(phoneNumberField.getCursorPosition());
- });
- phoneNumberField.addValueChangeListener(valueChangeEvent -> {
- String val = phoneNumberField.getValue();
- Matcher m = patternPhoneSimple.matcher(val);
- if (m.matches()) {
- phoneNumberField.setValue(formatPhone(val));
- }
- });
- addComponent(phoneNumberField);
- }
- private int countCursorOffset(String number, int currPos) {
- final int PHONE_NUMBER_LEN = 10;
- List<Character> specChars = new ArrayList<>(Arrays.asList('+', '-', ' ', '(', ')'));
- if (number.contains(" ")) {
- String formattedPrefix = number.substring(0, currPos);
- String originalPrefix = formattedPrefix.replaceAll("[\\+ ()-]", "");
- return originalPrefix.length() - formattedPrefix.length();
- } else {
- //we cannot count formatted prefix since we do not have full valid 10-digit number yet
- // so let's extend number to its full len and count prefix len as
- StringBuilder sb = new StringBuilder(number);
- while (sb.length() < PHONE_NUMBER_LEN)
- sb.append("9");
- String formatted = formatPhone(sb.toString());
- int i = 0, j = 0, formattedPrefixLen = 0;
- while (i < currPos) {
- if (!specChars.contains(formatted.charAt(i))) {
- if (formatted.charAt(i) == number.charAt(j)) {
- formattedPrefixLen++;
- j++;
- }
- }
- i++;
- }
- String originalPrefix = number.substring(0, currPos);
- return formattedPrefixLen - originalPrefix.length();
- }
- }
- private String formatPhone(String val) {
- PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
- try {
- Phonenumber.PhoneNumber p = phoneNumberUtil.parse(val, "RU");
- return phoneNumberUtil.format(p, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL);
- } catch (NumberParseException e) {
- LOG.error(ExceptionUtils.getStackTrace(e));
- return val;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment