Χρειάζομαι μια regex που θα δέχεται μόνο ψηφία από 0-9 και τίποτα άλλο. Ούτε γράμματα, ούτε χαρακτήρες.
Σκέφτηκα ότι αυτό θα μπορούσε να λειτουργήσει:
^[0-9]
...ή ακόμα και...
\d+
αλλά αυτά είναι αποδεκτά από τους χαρακτήρες : ^,$,(,), κ.λπ.
Νόμιζα ότι και οι δύο παραπάνω regexes θα έκαναν το κόλπο και δεν είμαι σίγουρος γιατί δέχεται αυτούς τους χαρακτήρες.
EDIT:
Αυτό ακριβώς κάνω:
private void OnTextChanged(object sender, EventArgs e)
{
if (!System.Text.RegularExpressions.Regex.IsMatch("^[0-9]", textbox.Text))
{
textbox.Text = string.Empty;
}
}
Αυτό επιτρέπει τους χαρακτήρες που ανέφερα παραπάνω.
Το regex σας ^[0-9]
ταιριάζει με οτιδήποτε αρχίζει με ένα ψηφίο, συμπεριλαμβανομένων συμβολοσειρών όπως "1A". Για να αποφύγετε μια μερική αντιστοίχιση, προσθέστε ένα $
στο τέλος:
^[0-9]*$
Αυτό δέχεται οποιονδήποτε αριθμό ψηφίων, συμπεριλαμβανομένου και κανενός. Για να δεχτείτε ένα ή περισσότερα ψηφία, αλλάξτε το *
σε +
. Για να δεχτείτε ακριβώς ένα ψηφίο, απλά αφαιρέστε το *
.
ΑΝΑΘΕΩΡΗΣΗ: Ανακατέψατε τα ορίσματα για το IsMatch
. Το μοτίβο πρέπει να είναι το δεύτερο όρισμα, όχι το πρώτο:
if (!System.Text.RegularExpressions.Regex.IsMatch(textbox.Text, "^[0-9]*$"))
ΠΡΟΣΟΧΗ: Στη JavaScript, το \d
είναι ισοδύναμο με το [0-9]
, αλλά στο .NET, το \d
από προεπιλογή ταιριάζει με οποιοδήποτε Unicode δεκαδικό ψηφίο, συμπεριλαμβανομένων εξωτικών τιμών όπως ႒ (Myanmar 2) και ߉ (N'Ko 9). Αν η εφαρμογή σας δεν είναι προετοιμασμένη να αντιμετωπίσει αυτούς τους χαρακτήρες, παραμείνετε στο [0-9]
(ή παρέχετε τη σημαία RegexOptions.ECMAScript).