| 

.NET C# Java Javascript Exception

2
Hi,

ich hab eine Regular Expression (nicht von mir geschrieben), bei der am Ende und Schluss des Strings kein Bindestrich und Punkt stehen darf. Die Regular Expression wird zur Validierung eines Inputfeldes benötigt. Nun hab ich aber das Problem, dass die Valdidierung auf fehlschlägt wenn das Inputfeld resp. der String leer ist. Was muss ich anpassen?

Die Regular Expression sieht wie folgt aus:
^[^\.-].*[^\.-]$


Danke für die Hilfe
17.07.2013
rjgamer 31 3
2 Antworten
2
Weil "*" bedeutet: beliebig oft (also auch kein mal)
Verwende stattdessen "+" welches bedeutet: beliebig oft, mindest jedoch einmal

^[^\.-].+[^\.-]$


Erklärung des RegexTree's:

// ^[^\.-].*[^\.-]$
//
// Assert position at the start of the string «^»
// Match a single character NOT present in the list below «[^\.-]»
// A . character «\.»
// The character "-" «-»
// Match any single character that is not a line break character «.*»
// Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»

// Match a single character NOT present in the list below «[^\.-]»
// A . character «\.»
// The character "-" «-»
// Assert position at the end of the string (or before the line break at the end of the string, if any) «$»

bzw.:

// ^[^\.-].+[^\.-]$
//
// Assert position at the start of the string «^»
// Match a single character NOT present in the list below «[^\.-]»
// A . character «\.»
// The character "-" «-»
// Match any single character that is not a line break character «.+»
// Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»

// Match a single character NOT present in the list below «[^\.-]»
// A . character «\.»
// The character "-" «-»
// Assert position at the end of the string (or before the line break at the end of the string, if any) «$»
17.07.2013
Floyd 14,6k 3 9
Floyd 14,6k 3 9
Aber die in der Frage gegebene RegEx dürfte doch auch nach Deiner Erklärung nur auf Texte matchen, die mindestens 2 Zeichen leer sind? (Am Anfang und am Ende jeweils irgendwas, was nicht . oder - ist, dazwischen 0 bis unbegrenzt viele andere Zeichen.) Mit '+' statt '*' werden daraus 3 statt 2 Zeichen Mindestlänge. Aber warum bei rjgamer ein leerer Text matcht, erschließt sich mir noch nicht.
Matthias Hlawatsch 01.10.2013
Das ist etwas "komisch", da hast du recht. Eine genaue Erklärung kann ich hierfür nicht geben. Ich vermute einen Implementierungsfehler im RegEx-Parser/Interpreter wobei ich das mangels weiterer Informationen nicht belegen kann.
Floyd 01.10.2013
0
Wenn ich den regulären Ausdruck richtig verstehe, dann muss die leere Zeichenkette eine gültige Eingabe sein.
Der erste Ausdruck prüft, ob kein Punkt oder Minus am Anfang stegt: bei leerer Zeichenkette erfüllt. Dann folgt ein Ausdruck: leere Zeichenkette oder beliebige Zeichen - auch erfüllt. Der letzte Ausdruck entspricht dem ersten Ausdruck - also für leere Zeichenkette ebenfalls erfüllt.

Das scheint zu funktionieren:
^([^\.-]){1}.*([^\.-]){1}$

Man muss mindestens zwei Zeichen eingeben, die kein Punkt oder minus enthalten. Die leere Zeichenkette ist nicht gültig.
Hoffe, es hilft...
01.10.2013
edvservice 1,4k 1 6

Stelle deine Php-Frage jetzt!