2012-06-28 10 views
7

Szukałem i szukałem i próbowałem wiele różnych sposobów, ale nie wydają się rysunek to. Szukam sposobu na dopuszczenie tylko znaków alfanumerycznych, a następnie tylko jednej spacji, a następnie znaków alfanumerycznych. Jestem pewien, że to łatwe, ale nie wiem.Wyrażenie regularne, aby umożliwić alfanumeryczny, tylko jedno miejsce, a następnie alpahnumeric

Przykłady czego chcę:

 
    First Last  Allowed 
    First La-st Not Allowed 
    FirstLast  Not Allowed 
    First Last Not Allowed 
    First La'st Not allowed 

bym wtedy jak usunąć nieprawidłowe znaki z łańcucha.

Proszę dać mi znać, jeśli potrzebujesz więcej informacji. Wielkie dzięki!

+0

Jak definiujesz alfanumeryczne? – CodesInChaos

+1

Jaka jest nieważna postać do usunięcia w "FirstLast"? Wszystkie znaki, które tam są są ważne. – hvd

+1

Jeśli wszystko jest w porządku z włączeniem podkreślników, użyj \ w, aby wskazać: a-zA-Z0-9_ – BlackVegetable

Odpowiedz

13
^[a-zA-Z0-9]+ [a-zA-Z0-9]+$ 

& hellip; powinien to zrobić.

+0

Nie sprecyzował, ale zakładam, że "^" i "$" będą tutaj odpowiednie. –

+0

Może być tym, co chce OP. Ale z pewnością odrzuca wiele znaków alfanumerycznych. – CodesInChaos

+0

@ JonathonReinhart: Zaktualizowano to dokładnie 5 sekund po odebraniu: P – Ryan

6

ten powinien zrobić:

^[0-9a-zA-Z]+ [0-9a-zA-Z]+$ 

Demo: http://jsfiddle.net/5m6RH/

+1

Nie zgadzam się z '\ s'. Myślę, że powinno to być spacja ("") –

+0

'\ s' może pasować do znaku nowej linii, tabulatora lub ... – voithos

+0

@ JonathonReinhart: Zaktualizowano. – mellamokb

5

Użyj tego regex:

^[\p{L}\d]+ [\p{L}\d]+$ 
+1

O tak, to C#. +1. Możesz jednak zmienić to na spację. – Ryan

0

To powinno działać

(?i)\b[a-z\d]+ [a-z\d]+\b 
1

wierzę, że nie chcesz numery w nazwach i szukasz tego regex:

^\p{L}+ \p{L}+$ 

lub

^\p{L}+\s\p{L}+$ 

gdzie \p{L}+ dopasowuje jeden lub więcej znaków „list”, a więc nie tylko a-z i A-Z, ale również postacie innych językach. Na przykład: Élise Wilson.


Jeśli naprawdę chcesz, aby tylko alfanumeryczne znaki i dane wejściowe miały dwie sekcje z jednym odstępem; i nieprawidłowych znaków ma zostać usunięty, a następnie:

  1. zastąpić wszystkie mecze [^\s\dA-Za-z]+ z pustym ciągiem,
  2. wykończenia spacje zastępując ^\s* z pustym ciągiem,
  3. wykończenia spacje zastępując \s*$ z pusty ciąg znaków, a
  4. sprawdzić/zweryfikować taki ciąg z regex ^[\da-zA-Z]+ [\da-zA-Z]+$

Aby wykluczyć numery od strln g usuń \d z powyższych wzorów.

Aby zezwolić na dłuższe spacje między, a nie tylko jednym znakiem spacji, dodaj + za spacji w pierwszym wzorze lub za \s w drugim.

+0

Zastąpienie wydaje się działać ze wszystkim, z wyjątkiem sytuacji, gdy umieszczają więcej niż jedną spację między dwoma słowami. – user1489735

+0

@ user1489735 - następnie idź z '^ \ p {L} + + p {L} + $' lub '^ \ p {L} + \ s + \ p {L} + $' –

+0

Właściwie nie używam to wyrażenie, ponieważ chcę tylko liter i cyfr, więc używam @ "^ [a-zA-Z0-9] + [a-zA-Z0-9] + $" Następnie, używając zamiany w twojej sugestii w krok 1 twojego postu powyżej. Działa to na wszystko, ale użytkownik wstawia więcej niż jedną spację między wyrazami. – user1489735

0

to będzie działać idealnie dla znaków alfanumerycznych i tylko jedna przestrzeń między nimi, jeśli obowiązującym

@"^[a-zA-Z0-9]+([ ]{0,1}[a-zA-Z0-9]+)*$" 

pozwoli to jak wartości

anand 
    anand dev 
    anand123 
    anand123 dev 
    123anand 
    123anand dev123 
    my user name is anand123 
    anand123 dev    **Not allowed due to multiple space** 
    anand dev     **not allowed due to space at begining** 

nadzieję, że to pomoże. Dzięki.

+0

The Wydaje się, że OP chciało dokładnie 2 słowa z dokładnie 1 spacja między nimi, a nie "jeden lub więcej" słów z pojedynczymi odstępami pomiędzy, jak twoje rozwiązanie. –

Powiązane problemy