# CPF, CEP या तिथि पर मास्क कैसे लागू करें

> मास्क के साथ CPF, CEP और तिथियों को स्वचालित रूप से फ़ॉर्मैट करें और साफ़ अंक पढ़ें।

Source: https://crossfly.dev/hi/docs/cookbook/forms/mascara-cpf — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# CPF, CEP या तिथि पर मास्क कैसे लागू करें

**उद्देश्य.** टाइपिंग को विभाजकों (बिंदु, डैश, स्लैश) के साथ स्वचालित रूप से फ़ॉर्मैट करना ताकि उपयोगकर्ता केवल अंक टाइप करते समय `123.456.789-00` दिखे, और बाद में साफ़ मान (`12345678900`) प्राप्त किया जा सके।

## उपयोग की गई APIs
- `campo.<TextFieldStyle>getStyle().mask("999.999.999-99".toCharArray())` — मास्क का पैटर्न परिभाषित करता है। `9` = अंक की स्थिति; कोई भी अन्य वर्ण एक लिटरल है जो स्वचालित रूप से डाला जाता है (`.`, `-`, `/`)।
- `.mode(EditMode.NUMERIC, true)` — न्यूमेरिक मोड और `maskedEdit` (दूसरा पैरामीटर `true`) दोनों को चालू करता है। `maskedEdit` के बिना मास्क लागू नहीं होता। क्रम मायने रखता है: `mask(...)` और `mode(...)` को एक साथ कॉल करें।
- `TextField.getText()` — मास्क सहित टेक्स्ट लौटाता है (`"123.456.789-00"`), फ़ॉर्मैटेड रूप में प्रदर्शित/सहेजने के लिए आदर्श।
- `TextField.getTextWithoutMask()` — केवल `9` स्थितियों के अंक लौटाता है (`"12345678900"`), बैकएंड को सत्यापित करने और भेजने के लिए आदर्श।

> **तिथियों** के लिए, `setMode(EditMode.DATE, true)` को प्राथमिकता दें: यह locale से स्वचालित रूप से मास्क निकालता है (`LocaleFormats.dateSeparator` और `LocaleFormats.dateFormat`, उदा.: `dd/MM/yyyy` या `yyyy-MM-dd`) और DatePicker भी खोलता है। रेसिपी [तिथि और समय](/docs/cookbook/forms/data-e-hora) देखें।

> `mode(EditMode.NUMERIC, true)` में क्रम पर ध्यान दें: `NUMERIC`/`NORMAL` मोड मास्क से `maxLength` की पुनर्गणना केवल तभी करता है जब मास्क पहले से परिभाषित हो। `mask(...)` को **पहले** या उसी फ़्लुएंट चेन में परिभाषित करें।

## पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
```java
package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*;   // TextFieldStyle (style में config)

/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      // CPF: 123.456.789-00
      TextField cpf = new TextField("");
      cpf.caption("CPF");
      cpf.<TextFieldStyle>getStyle()
         .mask("999.999.999-99".toCharArray())
         .mode(EditMode.NUMERIC, true);   // NUMERIC + maskedEdit

      // CEP: 12345-678
      TextField cep = new TextField("");
      cep.caption("CEP");
      cep.<TextFieldStyle>getStyle()
         .mask("99999-999".toCharArray())
         .mode(EditMode.NUMERIC, true);

      Label resultado = new Label("");

      Button enviar = new Button("Enviar");
      enviar.onAction(o ->
      {
         String cpfFormatado = cpf.getText();            // "123.456.789-00"
         String cpfLimpo     = cpf.getTextWithoutMask(); // "12345678900"
         if (cpfLimpo.length() != 11)
         {
            Hint.show("CPF deve ter 11 dígitos", 2000);
            return;
         }
         resultado.setText(cpfFormatado + " · CEP: " + cep.getText());
      });

      add(LAY_FILL, cpf);
      add(LAY_FILL, cep);
      add(LAY_AUTO, enviar);
      add(LAY_FILL, resultado);
   }
}
```

> नीचे दिया गया अंश **केवल मुख्य भाग** दिखाता है। चलाने के लिए, इसे ऊपर दिए गए `MainWindow` ढाँचे में रखें।

## न्यूनतम अंश
```java
import dev.crossfly.ui.*;
import dev.crossfly.ui.style.*;
import static dev.crossfly.ui.UIConstants.EditMode;

// CPF: 123.456.789-00
TextField cpf = new TextField("");
cpf.caption("CPF");
cpf.<TextFieldStyle>getStyle()
   .mask("999.999.999-99".toCharArray())
   .mode(EditMode.NUMERIC, true);   // NUMERIC + maskedEdit

// CEP: 12345-678
TextField cep = new TextField("");
cep.caption("CEP");
cep.<TextFieldStyle>getStyle()
   .mask("99999-999".toCharArray())
   .mode(EditMode.NUMERIC, true);

Button enviar = new Button("Enviar");
enviar.onAction(o ->
{
   String cpfFormatado = cpf.getText();            // "123.456.789-00"
   String cpfLimpo     = cpf.getTextWithoutMask(); // "12345678900"
   // cpfLimpo.length() == 11 सत्यापित करके भेजता है
});
```

## गहराई से जानें
- [मास्क और कीबोर्ड](/docs/ui/forms-and-input/masks-and-keyboards) · [टेक्स्ट फ़ील्ड](/docs/ui/forms-and-input/text-fields)
- सहयोगी रेसिपी: [किसी फ़ील्ड को सत्यापित करें](/docs/cookbook/forms/validar-campo) · [करेंसी मास्क](/docs/cookbook/forms/mascara-moeda) · [तिथि और समय](/docs/cookbook/forms/data-e-hora)
- कैननिकल स्रोत: अध्याय 14 — मूल विजेट · [Enums (UIConstants)](/docs/reference/enums-uiconstants)
