2017-01-29 2 views
1

Wie kann ich führende Leerzeichen und End-Leerzeichen zurückweisen und erlauben nur ein Leerzeichen zwischen den Zeichen in JavaScript?Regex, um Platz am Anfang und Ende zu erlauben und erlauben nur ein Leerzeichen zwischen den Zeichen

Ich habe versucht, viele Muster, hier ist zuletzt:

^[^-\s][a-zA-Z0-9_\s-]*$ 

Aber dieser Raum überhaupt nicht gestattet.

Ich verwende [a-zA-Z0-9_\s-], weil ich nur englische Zeichen zulassen möchte.

Auch ich kann nicht trimmen oder ersetzen. Ich verbinde Tastendruck mit Eingabefeld in HTML und überprüfe das Muster und wenn regex.test(e.key) falsch ist, deaktiviere ich das Ereignis.

+1

Was meinst du mit "deaktivieren"? Meinst du entfernen? Oder nicht übereinstimmen? Meinst du ein ** total ** von einem Leerzeichen zwischen Zeichen, oder höchstens ein Leerzeichen zwischen ** irgendwelchen ** zwei Zeichen? Bitte zeigen Sie weitere Beispiele für Testeingaben und die Ergebnisse. Benötigen Sie eine Regexp, die mit einer gültigen Eingabe übereinstimmt, oder ist es akzeptabel, eine Übereinstimmung mit einer ungültigen Eingabe zu finden und nicht mit einer gültigen Eingabe übereinzustimmen? BTW der Name der Sprache ist "JavaScript". Überprüfen Sie bitte auch den Titel Ihrer Frage und schreiben Sie den ersten Buchstaben der Sätze (und das Wort "I *) wie in korrektem Englisch. –

+0

passt() auf jede Tastatur, um Ihren Fall zu lösen? Sie können das nicht vorhersagen Leerzeichen in der Eingabe der letzte oder Benutzer wird es in den Buchstaben ändern. – Daniel

Antwort

0

Dies bestätigt die angegebene String wie gewünscht:

var wrong = " hello, my dear friend "; 
 
var right = "hello, my dear frind" 
 

 
function validate(s){ 
 
    var validateRegEx = new RegExp(/^\s+|\s\s+|\s+$/g); 
 
    return !s.match(validateRegEx); 
 
} 
 

 
console.log("Validation of '" + wrong + "': " + validate(wrong)); 
 
console.log("Validation of '" + right + "': " + validate(right));

+0

Ich kann trim nicht verwenden oder ersetzen, ich bindenden Tastendruck zu inut und überprüfen Sie für das Muster, und wenn regex.test (e.key) ist falsch, ich das Ereignis dible. – user6599525

+1

@ user6599525 Bitte aktualisieren Sie Ihre Frage, diese Informationen ändert sich viel :) – ppasler

0

Sie versuchen nur, führende und nachfolgende Leerzeichen zu entfernen? Probieren Sie etwas wie folgt aus:

str.match(/^\s+.*\s+$/g,''); 

UPD:

$(document).ready(function() { 
 
    $('input').on('change keyup', function(e) { 
 

 
    var str = $(e.target).val(); 
 
    var disallowed = str.match(/^\s+.*|.*\s+$/g); 
 
    
 
    if (disallowed != null) { 
 

 
     $('button').prop('disabled', true); 
 
    } else { 
 

 
     $('button').prop('disabled',false); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input type="text"> 
 
<button>add</button>

+0

ich kann nicht trimmen oder ersetzen, ich bin binding Tastendruck zu inut und überprüfen Sie für das Muster, und wenn regex.test (e.key) ist falsch ich das Ereignis – user6599525

+0

aktualisiert für Sie Fall – Daniel

0

/^\s+|\s{2,}|\s+$/g ist was du suchst. Plus, es ist nicht e.key was Sie validieren möchten, es ist this.value.

Beispiel:

document.getElementById("test").onkeyup = function() { 
 
    var str = this.value; 
 
    if (/^\s+|\s{2,}|\s+$/.test(str)) 
 
    this.className = "not-valid"; 
 
    else 
 
    this.className = ""; 
 
}
.not-valid{ 
 
    background-color: #FAA; 
 
} 
 

 
span{ 
 
    color: red; 
 
    display: none; 
 
} 
 

 
.not-valid+span{ 
 
    display: inline; 
 
}
<input id="test" /><span> not valid</span>

+0

Ich kann nicht trimmen oder ersetzen, bin ich verbindlich Tastenkürzel zu inut und überprüfen Sie für das Muster, und wenn regex.test (e.key) ist falsch ich das Ereignis – user6599525

+0

@ user6599525 Überprüfen Sie die neue Antwort. –

2

Wenn Sie eine regexp wollen die gültige Eingabe übereinstimmt, und nicht passende ungültige Eingabe wie in anderen Antworten, dann:

/^\S(?!.* )\S$/ 

\S ist ein Nicht-Leerzeichen. Der mittlere Teil ist ein negativer Lookahead, der sicherstellt, dass es nirgendwo zwei Leerzeichen gibt.

Verwandte Themen