# Mask for entering and displaying data in Char fields

**URL:** https://discuss.tryton.org/t/mask-for-entering-and-displaying-data-in-char-fields/1411
**Category:** Developer
**Created:** [May 23, 2019, 1:43pm UTC](https://discuss.tryton.org/t/mask-for-entering-and-displaying-data-in-char-fields/1411 "2019-05-23T13:43:50Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![bell](https://discuss-cdn.tryton.org/letter_avatar_proxy/v4/letter/b/c67d28/32.png) [@bell](https://discuss.tryton.org/u/bell)
#### Post date: [May 23, 2019, 1:43pm UTC](https://discuss.tryton.org/t/mask-for-entering-and-displaying-data-in-char-fields/1411/1 "2019-05-23T13:43:50Z")

</div>

Is it possible to use a mask to enter and display data in Char fields?  
(Something like `inputMask` property of `QLineEdit` widget in `Qt`.)

---

<div class="post-metadata">

### Author: ![ced](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/ced/32/1237_2.png) [@ced](https://discuss.tryton.org/u/ced)
#### Post date: [May 23, 2019, 2:43pm UTC](https://discuss.tryton.org/t/mask-for-entering-and-displaying-data-in-char-fields/1411/2 "2019-05-23T14:43:20Z")

</div>

We do not have such feature but you can define a domain on the Char field which tries to validate the input.  
But it may be a good improvement to validate input using the domain.

---

<div class="post-metadata">

### Author: ![bell](https://discuss-cdn.tryton.org/letter_avatar_proxy/v4/letter/b/c67d28/32.png) [@bell](https://discuss.tryton.org/u/bell)
#### Post date: [May 23, 2019, 3:53pm UTC](https://discuss.tryton.org/t/mask-for-entering-and-displaying-data-in-char-fields/1411/3 "2019-05-23T15:53:11Z")

</div>

I would like to enter the IP-address (000.000.000.000) without dots or MAC-address (HH:HH:HH:HH:HH:HH) without colons, but the separators (dots, colons) should be visible when entering.

---

<div class="post-metadata">

### Author: ![ced](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/ced/32/1237_2.png) [@ced](https://discuss.tryton.org/u/ced)
#### Post date: [May 23, 2019, 3:56pm UTC](https://discuss.tryton.org/t/mask-for-entering-and-displaying-data-in-char-fields/1411/4 "2019-05-23T15:56:40Z")

</div>

Well maybe you can do like the phone number on contact mechanism. Having a formatted and compact value synchronized.

---

<div class="post-metadata">

### Author: ![fransuar](https://discuss-cdn.tryton.org/letter_avatar_proxy/v4/letter/f/59ef9b/32.png) [@fransuar](https://discuss.tryton.org/u/fransuar)
#### Post date: [April 25, 2022, 2:35pm UTC](https://discuss.tryton.org/t/mask-for-entering-and-displaying-data-in-char-fields/1411/5 "2022-04-25T14:35:26Z")

</div>

Hi. I have done something similar for what you are asking for. Maybe it results useful

```auto
     import re 

     mac_address = fields.Char('MAC address',
        help="Format FF:FF:FF:FF:FF:FF", size=17,
        domain=[
            ('mac_address_length','=', 17),
            ('mac_address_validation', '!=',
                Eval('mac_address_invalid_string'))
            ])
    mac_address_length = fields.Integer('MAC address length')
    mac_address_validation = fields.Char('MAC address validation')
    mac_address_invalid_string = fields.Function(
        fields.Char('Invalid string'),
        'get_mac_address_invalid_string')
    mac_address_check = fields.Function(
        fields.Boolean('MAC address valid', help="Checked if the address is right"),
        'on_change_with_mac_address_check')

   def get_mac_address_invalid_string(self, name=None):
        return gettext('maintenance_main.msg_non_valid_format')

    @fields.depends('mac_address')
    def on_change_with_mac_address_length(self, name=None):
        return self._get_mac_address_lenght()

    @fields.depends('mac_address')
    def on_change_with_mac_address_check(self, name=None):
        res = False
        if self._get_mac_address_lenght() == 17 and \
            self._get_mac_address_validation() != \
            gettext('maintenance_main.msg_non_valid_format'):
            res = True
        return res

    @fields.depends('mac_address')
    def on_change_with_mac_address_validation(self, name=None):
        return self._get_mac_address_validation()

    def _get_mac_address_lenght(self):
        if self.mac_address:
            return len(self.mac_address)
        return 17

    def _get_mac_address_validation(self):
        if self.mac_address:
            p = re.compile(r'(?:[0-9a-fA-F]:?){12}')
            res = re.findall(p, self.mac_address)
            if len(res) == 1 and res[0] == self.mac_address:
                return 'Valid format'
            return gettext('maintenance_main.msg_non_valid_format')
        return 'no mac address'

    @staticmethod
    def default_mac_address_invalid_string():
        return gettext('maintenance_main.msg_non_valid_format')

```

Hope it helps for someone else.  
Regards  
Francisco

---

<div class="post-metadata">

### Author: ![bell](https://discuss-cdn.tryton.org/letter_avatar_proxy/v4/letter/b/c67d28/32.png) [@bell](https://discuss.tryton.org/u/bell)
#### Post date: [April 29, 2022, 11:48am UTC](https://discuss.tryton.org/t/mask-for-entering-and-displaying-data-in-char-fields/1411/6 "2022-04-29T11:48:14Z")

</div>

Thanks a lot for the helpful solution. We will use it after the war.  
We are from Ukraine. [Stop war in Ukraine](https://stopwarukraine.com/)

---

<div class="post-metadata">

### Author: ![system](https://discuss-cdn.tryton.org/uploads/default/original/1X/c6f8ec0a40525cdcd50058c734283450a4b3d38b.png) [@system](https://discuss.tryton.org/u/system)
#### Post date: [May 29, 2022, 11:48am UTC](https://discuss.tryton.org/t/mask-for-entering-and-displaying-data-in-char-fields/1411/7 "2022-05-29T11:48:44Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
