2012-06-28 14 views
7

Ho cercato, cercato e provato in molti modi diversi, ma non riesco a capirlo. Sto cercando un modo per consentire solo caratteri alfanumerici, quindi solo uno spazio, quindi caratteri alfanumerici. Sono sicuro che sia facile, ma non lo so.Espressione regolare per consentire alfanumerico, solo uno spazio e alfanumerico

Esempi di ciò che voglio:

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

ho poi volessi rimuovere i caratteri non validi dalla stringa.

Per favore fatemi sapere se avete bisogno di maggiori informazioni. Molte grazie!

+0

Come si definisce alfanumerico? – CodesInChaos

+1

Qual è il carattere non valido da rimuovere in "FirstLast"? Tutti i personaggi che ci sono sono validi. – hvd

+1

Se stai bene includendo caratteri di sottolineatura, usa \ w per indicare: a-zA-Z0-9_ – BlackVegetable

risposta

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

& hellip; dovrebbe farlo

+0

Non ha specificato, ma assumerei '^' e '$' sarebbe appropriato qui. –

+0

Potrebbe essere ciò che l'OP vuole. Ma certamente rifiuta un sacco di caratteri alfanumerici. – CodesInChaos

+0

@JonathonReinhart: aggiornato esattamente 5 secondi dopo la risposta: P – Ryan

6

Questo dovrebbe farlo:

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

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

+1

Non sono d'accordo con '\ s'. Penso che dovrebbe essere uno spazio ("") –

+0

'\ s' può corrispondere a un carattere di nuova riga, o scheda, o ... – voithos

+0

@JonathonReinhart: aggiornato. – mellamokb

5

Utilizzare questa espressione regolare:

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

Oh, giusto, è C#. +1. Puoi comunque cambiarlo in uno spazio. – Ryan

0

Questo dovrebbe funzionare

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

Credo che non vuoi i numeri nei nomi e siete alla ricerca di questo regex:

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

o

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

dove \p{L}+ corrisponde a uno o più caratteri "lettera", quindi non solo a-z e A-Z, ma anche caratteri diversi lingue. Ad esempio, Élise Wilson.


Se si desidera solo caratteri alfanumerici e l'input deve avere due sezioni con uno spazio tra; e caratteri non validi deve essere rimosso, quindi:

  1. sostituire tutte le partite di [^\s\dA-Za-z]+ con una stringa vuota,
  2. assetto spazi iniziali sostituendo ^\s* con una stringa vuota,
  3. assetto spazi finali sostituendo \s*$ con una stringa vuota, e
  4. controllo/convalidano tale stringa con regex ^[\da-zA-Z]+ [\da-zA-Z]+$

Per escludere numeri da strIn g rimuovere \d da schemi precedenti.

Per consentire uno spazio più lungo tra, non solo un carattere di spazio, aggiungere + dietro il carattere dello spazio nel primo schema o dietro allo \s nel secondo.

+0

La sostituzione sembra funzionare con tutto tranne che se inseriscono più di uno spazio tra le due parole. – user1489735

+0

@ user1489735 - quindi vai con '^ \ p {L} + + \ p {L} + $' o '^ \ p {L} + \ s + \ p {L} + $' –

+0

In realtà non sto usando che regex perché voglio solo lettere e numeri, quindi sto usando @ "^ [a-zA-Z0-9] + [a-zA-Z0-9] + $" Quindi, usando la sostituzione nel tuo suggerimento in passaggio 1 del tuo post sopra. Questo funziona per tutto tranne che per l'utente che inserisce più di uno spazio tra le parole. – user1489735

0

questo funziona perfettamente per alfanumerico e solo uno spazio tra di loro, se applicabile

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

permetterà come valori

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** 

Spero che questo vi aiuterà. Grazie.

+0

Il OP sembra aver voluto esattamente 2 parole con esattamente 1 spazio tra di esse, non "una o più parole" con spazi singoli in mezzo, come la tua soluzione. –

Problemi correlati