TCL da regex: Faqat 0-9 va bitta maxsus so'zga ruxsat bering

Regex iborasini ishlatib, tablelistda foydalanuvchi kiritishni tekshirishni istayman. Odatda, faqat quyidagi kodlari yordamida 0-9 ruxsat berishni xohlayman:

   $w configure -invalidcommand bell -validate key -validatecommand  {regexp {^[0-9]*$} %s}

Bu yaxshi ishlaydi. Endi bu ifodani faqat 0-9 raqamlariga yoki "qattiq" so'ziga ruxsat berishni xohlayman. Men buni sinab ko'rdim, lekin bu menga biror narsa yozish imkonini beradi.

$w configure -invalidcommand bell -validate key -validatecommand  {regexp {regexp {^([0-9])|^Rigid?\>*$} %s}
0
{^ (?: [0-9] * | Rigid) $} dan foydalanishingiz mumkin
qo'shib qo'ydi muallif Wiktor Stribi?ew, manba

8 javoblar

Tasdiqlash kodini provayderga kiritish haqida o'ylashingiz mumkin:

$w configure -invalidcommand bell -validate key -validatecommand  {validate %s}

proc validate {data} {
    return [regexp {^(?:[0-9]*|Rigid)$} $data]
    # yoki
    return [expr {$data eq "Rigid" || [string is integer $data]}]
}

yoki

3
qo'shib qo'ydi

Tasdiqlash kodini provayderga kiritish haqida o'ylashingiz mumkin:

$w configure -invalidcommand bell -validate key -validatecommand  {validate %s}

proc validate {data} {
    return [regexp {^(?:[0-9]*|Rigid)$} $data]
    # yoki
    return [expr {$data eq "Rigid" || [string is integer $data]}]
}

yoki

3
qo'shib qo'ydi

Tasdiqlash kodini provayderga kiritish haqida o'ylashingiz mumkin:

$w configure -invalidcommand bell -validate key -validatecommand  {validate %s}

proc validate {data} {
    return [regexp {^(?:[0-9]*|Rigid)$} $data]
    # yoki
    return [expr {$data eq "Rigid" || [string is integer $data]}]
}

yoki

3
qo'shib qo'ydi

The ^([0-9])|^Rigid?\>*$ pattern allows matching more than what Senga kerak as ^ only applies to the ([0-9]), a digit, so the first char should be a digit, and the rest can be any. ^Rigid?\>*$ matches a string that starts with Rigi, may have a d after it, and then has 0+ > symbols.

Senga kerak

{^(?:[0-9]*|Rigid)$}

Bu erda langerlar ikkala naqshga ham qo'llaniladi va faqatgina 0+ raqamga yoki Rigid ga butun bir qator sifatida ruxsat etiladi.

1
qo'shib qo'ydi

The ^([0-9])|^Rigid?\>*$ pattern allows matching more than what Senga kerak as ^ only applies to the ([0-9]), a digit, so the first char should be a digit, and the rest can be any. ^Rigid?\>*$ matches a string that starts with Rigi, may have a d after it, and then has 0+ > symbols.

Senga kerak

{^(?:[0-9]*|Rigid)$}

Bu erda langerlar ikkala naqshga ham qo'llaniladi va faqatgina 0+ raqamga yoki Rigid ga butun bir qator sifatida ruxsat etiladi.

1
qo'shib qo'ydi

$ w configure -invalidcommand call -validate kalit -validatecommand {regexp {^ [0-9] * $}% S}

    

Bu null yoki "0-9 oralig'ida bir yoki bir nechta raqamlarga" ruxsat beradi.

  

Kamida bitta raqamni ta'minlash uchun * o'rniga + ni ishlating.

Endi sizning savolingizga keladigan bo'lsak, 0-9 raqamlarini yoki "qattiq"

    

{{^ [0-9] + $ | ^ Rigid $) dan foydalaning.

  

Saytga hozirgina sinab ko'rgan misolni keltiring:

Agar [stdin]

agar {{regexp - {(^ [0-9] + $ | ^ Rigid $)} $ a]} {     qo'yadi "ha" } Boshqa {     "yo'q" qo'yadi }

Chiqish ma'lumotlari:

    

$ tclsh test1     12     ha     $ tclsh test1     Ruxsat etilgan     ha     $ tclsh test1     qattiq     Yo'q     $ tclsh test1     32w     Yo'q     $ tclsh test1

  

Yo'q

    

$

  

Apology for the format. enter image description here

0
qo'shib qo'ydi

$ w configure -invalidcommand call -validate kalit -validatecommand {regexp {^ [0-9] * $}% S}

    

Bu null yoki "0-9 oralig'ida bir yoki bir nechta raqamlarga" ruxsat beradi.

  

Kamida bitta raqamni ta'minlash uchun * o'rniga + ni ishlating.

Endi sizning savolingizga keladigan bo'lsak, 0-9 raqamlarini yoki "qattiq"

    

{{^ [0-9] + $ | ^ Rigid $) dan foydalaning.

  

Saytga hozirgina sinab ko'rgan misolni keltiring:

Agar [stdin]

agar {{regexp - {(^ [0-9] + $ | ^ Rigid $)} $ a]} {     qo'yadi "ha" } Boshqa {     "yo'q" qo'yadi }

Chiqish ma'lumotlari:

    

$ tclsh test1     12     ha     $ tclsh test1     Ruxsat etilgan     ha     $ tclsh test1     qattiq     Yo'q     $ tclsh test1     32w     Yo'q     $ tclsh test1

  

Yo'q

    

$

  

Apology for the format. enter image description here

0
qo'shib qo'ydi

$ w configure -invalidcommand call -validate kalit -validatecommand {regexp {^ [0-9] * $}% S}

    

Bu null yoki "0-9 oralig'ida bir yoki bir nechta raqamlarga" ruxsat beradi.

  

Kamida bitta raqamni ta'minlash uchun * o'rniga + ni ishlating.

Endi sizning savolingizga keladigan bo'lsak, 0-9 raqamlarini yoki "qattiq"

    

{{^ [0-9] + $ | ^ Rigid $) dan foydalaning.

  

Saytga hozirgina sinab ko'rgan misolni keltiring:

Agar [stdin]

agar {{regexp - {(^ [0-9] + $ | ^ Rigid $)} $ a]} {     qo'yadi "ha" } Boshqa {     "yo'q" qo'yadi }

Chiqish ma'lumotlari:

    

$ tclsh test1     12     ha     $ tclsh test1     Ruxsat etilgan     ha     $ tclsh test1     qattiq     Yo'q     $ tclsh test1     32w     Yo'q     $ tclsh test1

  

Yo'q

    

$

  

Apology for the format. enter image description here

0
qo'shib qo'ydi