W mojej strony asp.net, mam pole wejściowe, które muszą mieć następujące sprawdzania poprawności na niej:regex dla alfanumeryczne, ale co najmniej jeden znak
musi zostać alfanumeryczny, z co najmniej 1 znak (czyli puszka nie będą liczbami ALL).
W mojej strony asp.net, mam pole wejściowe, które muszą mieć następujące sprawdzania poprawności na niej:regex dla alfanumeryczne, ale co najmniej jeden znak
musi zostać alfanumeryczny, z co najmniej 1 znak (czyli puszka nie będą liczbami ALL).
^\d*[a-zA-Z][a-zA-Z0-9]*$
Zasadniczo oznacza to:
Wypróbuj kilka testów, a zobaczysz, że przekazuje to alfanumeryczny ciąg ASCII, w którym wymagany jest co najmniej jeden nieliczbowy znak ASCII.
Kluczem do tego jest \d*
z przodu. Bez tego regex robi się o wiele bardziej niezręczny.
^[0-9]*[A-Za-z][0-9A-Za-z]*$
to wyrażenie regularne, które zrobi to, o co prosisz. Znak^i $ odpowiadają początkowi i końcowi słowa, aby zapobiec innym postaciom. Możesz zamienić blok [0-9A-z] na \ w, ale wolę bardziej rozbudowaną formę, ponieważ łatwiej jest rozszerzyć o inne znaki, jeśli chcesz.
Dodaj weryfikator wyrażeń regularnych do strony asp.net zgodnie z samouczkiem na temat MSDN: http://msdn.microsoft.com/en-us/library/ms998267.aspx.
może zawierać wszystkie liczby, nie? – akf
przegapił dodatkowy bit o konieczności posiadania co najmniej jednej postaci - zmieniłem ją, aby wymusić co najmniej jedną postać. – Dexter
Jeśli nie przechwytujesz, nie potrzebujesz() z wyjątkiem grupowania, a [] tworzy świetną grupę. A-z to coś więcej niż tylko litery. Prawdopodobnie miałeś na myśli [0-9A-Za-z] * [A-Za-z] [0-9A-Za-z] * –
^\w*[\p{L}]\w*$
To nie jest takie trudne. Wyrażenie regularne brzmi: dopasuj linię zaczynającą się od dowolnej liczby znaków słownych (liter, cyfr, znaków interpunkcyjnych (których możesz nie chcieć)), która zawiera jedną literę (to jest część [\p{L}]
w środku), po której następuje dowolna liczba znaków Znów słowo.
Jeśli chcesz wykluczyć interpunkcji, musisz się mocniejszy wyraz:
^[\p{L}\p{N}]*[\p{L}][\p{L}\p{N}]*$
A jeśli nie dbają o Unicode można użyć nudne wyrażenie:
^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
Potrzebujesz^i $ swap. –
@R. Pate: Dzięki. Nie byłby to kod, gdyby nie miał błędów. – Welbog
^[\p{L}\p{N}]*\p{L}[\p{L}\p{N}]*$
Objaśnienie:
[\p{L}\p{N}]*
zero lub więcej liter Unicode lub numery\p{L}
mecze jedna litera[\p{L}\p{N}]*
dopasowuje zero lub więcej liter Unicode lub numerów^
i $
kotwiące ciąg, upewniając się, że wyrażenie regularne pasuje do cały ciąg. Możesz je ominąć, w zależności od tego, którą funkcję dopasowywania wyrażenia regularnego wywołasz.Wynik: możesz mieć dowolny ciąg alfanumeryczny, chyba że gdzieś tam będzie litera.
\p{L}
jest podobny do [A-Za-z]
, z tym że zawiera wszystkie litery ze wszystkich alfabetów, z akcentami lub znakami diakrytycznymi lub bez nich. Jest znacznie bardziej inkluzywny, używając większego zestawu znaków Unicode. Jeśli nie chcesz tego substytutu elastyczności [A-Za-z]
. Podobna uwaga odnosi się do \p{N}
, którą można zastąpić przez [0-9]
, jeśli chcesz zachować prostotę. Więcej informacji można znaleźć w MSDN page on character classes.
Im mniej fantazyjne wersja non-Unicode byłoby
^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
\ p {N} pasowałoby do numerów Unicode, takich jak ① ②. Dla niektórych może to być zaskakujące: –
i \ p {L} pasowałyby również do chińskich liter. przed użyciem .. –
Włączenie pierwszej części, [\ p {L} \ p {N}] *, do \ p {N} * upraszcza objaśnienie i zapobiega śledzeniu wstecznemu –
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$
Może być
Czy to nie to samo, co w górnej części Odpowiedź? Po prostu \ d zastąpione przez [0-9]. –
No tak, nie widziałem, że w momencie opublikowania – eKek0
Większość odpowiedzi na to pytanie są poprawne, ale jest alternatywa, że (w niektórych przypadkach) oferuje większą elastyczność, jeśli chcesz zmienić reguły później:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$
Spowoduje to dopasowanie dowolnej sekwencji znaków alfanumerycznych, ale tylko wtedy, gdy pierwsza grupa również dopasuje całą sekwencję. Jest to mało znana sztuczka w wyrażeniach regularnych, która umożliwia obsługę bardzo trudnych problemów z weryfikacją.
Załóżmy na przykład, że musisz dodać kolejne ograniczenie: ciąg powinien zawierać od 6 do 12 znaków. Przedstawione tutaj oczywiste rozwiązania nie będą działały, ale przy użyciu metody "przestroga", regex staje się po prostu:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
Jaki cel ma drugi. * mają? –
Brak :-) Może być bezpiecznie anulowane . –
Wiem, że to bardzo stary post, ale to zaoszczędziło mi dzisiaj wiele czasu i kłopotów. UWAGA: w drugim wzorze drugi * IS jest wymagany, jeśli chcesz go poprawnie wymusić. Dzięki jeszcze raz. –
"Jedna litera alfanumeryczna" powinna brzmieć "Jedna litera alfabetu" lub podobna: ta część wyrażenia regularnego nie zawiera cyfr. –
\ d * jest sprytny! –
@ R.Pate: całkiem dobrze. Naprawiony. Dzięki. – cletus