2012-04-13 6 views
1

Ich habe preg_match für meine serverseitige Validierung verwendet, möchte aber auch eine Clientseite haben.Wie verwende ich match() für eine weiße Liste von Zeichen?

Für meine PHP erlaube ich diese Zeichen:

'/^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/' 

Wie würde ich eine weiße Liste von Zeichen mit match() in JavaScript zu machen?

EDIT:

habe ich versucht, diese aber es hat aus irgendeinem Grund nicht funktioniert:

Mein Debugger sagt, direkt vor dem if-Anweisung:

218SyntaxError: Invalid regular expression: range out of order in character class

$('#title').blur(function(){ 
     input = $('#title').val(); 
     var invalidChars = /^[^a-z][^a-z\d .:-,!?]+$/i; 
    if (!invalidChars.test(input)){ 
     alert('true');  
     } 
     else { 
      alert('false'); 
      } 
}); 
+0

Aus Neugier, was ist das eine Validierung für? (Welche Daten haben Sie, die mit einem Buchstaben beginnen müssen, aber dann mit so unterschiedlichen Daten verfolgt werden können, dass ein Leerzeichen oder ein Ausrufezeichen, aber kein Unterstrich erlaubt ist?) – Phrogz

+0

Hallo Danke für Ihre Antwort. Es ist der Titel einer Anzeige, die der Nutzer veröffentlichen muss. Ich probiere gerade die Codes aus. Grüße – eric01

Antwort

2

Die Verwendung von regex.test(str) ist etwas performanter als str.match(regex), wenn Sie nur wissen wollen, ob eine Übereinstimmung existiert oder nicht.

Alternativ können Sie frühzeitig, wenn Sie sehen, alle ungültigen Zeichen:

var invalidChars = /^[^a-z][^a-z\d .:\-,!?]+$/i; 
if (!invalidChars.test(myStr)){ 
    // we passed 
} 

Dies ermöglicht es dem regex Test, den Moment zu stoppen es sieht nicht erlaubte Zeichen.

+0

Hallo Danke für Ihre Antwort. Ich habe eine Bearbeitung meines Codes veröffentlicht. Bitte lassen Sie es mich wissen, wenn Sie wissen, was falsch ist. Vielen Dank – eric01

+0

Woops; Vorausgesetzt, Sie haben in Ihrem zweiten Zeichensatz einen buchstäblichen Bindestrich gemeint, müssen Sie diesem entgehen (oder ihn als letztes Element im Satz haben). Ich habe meinen Code entsprechend bearbeitet. – Phrogz

+0

Es funktioniert, vielen Dank! Grüße – eric01

2

Try die folgenden

var text = ...; 
if (text.match(/^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/)) { 
... 
} 
+0

Hallo, danke für deine Antwort. Der Bindestrich verursachte in diesem Code ein Problem, aber nach dem Entkommen funktioniert es jetzt. Vielen Dank – eric01

2

Eigentlich ist es das Gegenteil:

var regexp = /^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/; 

if (regexp.test(text)) { 


} 
+0

Hallo, danke für deine Antwort. Der Bindestrich verursachte in diesem Code ein Problem, aber nach dem Entkommen funktioniert es jetzt. Vielen Dank – eric01

+0

Anstatt den Bindestrich zu umgehen, platzieren Sie ihn am Ende der [] Klasse, so: [a-zA-Z0-9.:,!? -] So wird es nicht behandelt als der Bereichsoperator. –

3

alle oben genannten Antworten sind richtig, wenn auch nur eine Randbemerkung: Statt [A-Za-z] zu schreiben, ein einfaches /[a-z]/i genügt. Die i ist eine case-insensitive Flagge ...

+0

Hallo Danke für den Tipp! Grüße – eric01

Verwandte Themen