2012-11-13 27 views
2

我只想允許所有輸入到Django的字符都是0-9。CharField。當我使用RegexValidator()regex = r'[^0-9]'。我可以在該字段中輸入所有內容但是 0-9。實際上,它會允許我輸入一個字符串,如"word","a4523","!#$%#^%""5432bc",但是不是"4523"RegexValidator在CharField中不允許0-9

如果我拿出^並設置regex = r'[0-9]'(見下面的代碼),那麼我可以進入"4523""5432bc""a4523""word""!#$%#^%"

刪除^似乎讓我在正確的方向,但不是完整的方式。我不想使用PositiveSmallIntegerField,因爲我想將數字輸入視爲字符串。

class Number(models.Model): 
    number = models.CharField(
     max_length=14, 
     validators=[ 
      RegexValidator(
       r'[0-9]', 
       'Only 0-9 are allowed.', 
       'Invalid Number' 
      ), 
      MinLengthValidator(4), 
      MaxLengthValidator(14), 
     ], 
    ) 

回答

6

正則表達式[^0-9]表示匹配字符串中任意位置的非數字。你可能打算從^[0-9]開始,這需要在字符串的開頭有一個數字。對於完整的解決方案,我認爲你需要^[0-9]*$,它要求字符串中的所有字符都是數字。

+1

空白允許嗎?即'*'(0或更多)與'+'(1或更多)。另外:'^ \ d + $' – Hamish

+0

@Hamish,還有其他驗證器被用來約束輸入的長度。 OP顯然需要4至14個字符。在這種情況下,不需要在正則表達式中編碼。簡單在這裏看起來不錯。 –

+0

空白不允許。儘管在其中一個字段中,我想只允許在一串數字的前面加一個'+',即'+323'應該是允許的,但'+'不是必需的。 –