Skocz do zawartości

REGEX walidacja wprowadzonych danych [Rozwiązany]


_LM_

Pomocna odpowiedź

Potrzebuję napisać wyrażenie które sprawdzi czy w stringu znajduje poprawnie zapisana formuła. Poprawny zapis powinien wyglądać [A=400002][B=400004].... bez innych znaków. Niepoprawny zapis to na przykład: [=400002]{B=400004} Czyli regex powinien reagować tylko na znaki [] A...B = 0...9

Edytowano przez _LM_
Link do komentarza
Share on other sites

24 minuty temu, _LM_ napisał:

Potrzebuję napisać wyrażenie które sprawdzi czy w stringu znajduje poprawnie zapisana formuła. Poprawny zapis powinien wyglądać [A=400002][B=400004].... bez innych znaków. Niepoprawny zapis to na przykład: [=400002]{B=400004} Czyli regex powinien reagować tylko na znaki [] A...B = 0...9

\[(A|B)\=\d{6}\]

Może coś takiego na początek.

Pozdrawiam

BTW: to działa tak, że na początku musi być znak [potem A lub B, nastepnie znak = i sześć cyfr a po nich znak ]

mam nadzieję, że o coś takiego chodziło . Nie podałeś jakie to mają być regexp'y np. Perl, POSIX itp. - bo różnią się składnią.

Edytowano przez FlyingDutch
update
  • Lubię! 1
Link do komentarza
Share on other sites

(edytowany)
14 minut temu, FlyingDutch napisał:

Nie podałeś jakie to mają być regexp'y np. Perl, POSIX itp. - bo różnią się składnią

Dzięki! Używam go w programie b4J nakładka dla JAVY. 

4 minuty temu, ethanak napisał:

Czemu regex?

Bo łatwiej i szybciej? Zaraz sprawdzę oba wyrażenia, ilość znaków d{} może być różna 

https://b4x.com:51041/regex_ws/index.html tu sprawdzam i przy okazji mam gotowca do wklejenia 

Edytowano przez _LM_
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

Oba przykłady zadziałały, czy możliwe by było zbudowanie wyrażenia które dopuszcza taki ciąg [AB=400002] lub z jednym znakiem [B=400002]?

Edytowano przez _LM_
Link do komentarza
Share on other sites

Jeszcze jedna zagwozdka, zrobiłem żeby wykrywał znaki od A do Z ze zmianą ilości cyfr
 

^(\[([A-Z])\=\d{2,8}\])+$

a czy wielką kombinacją byłoby dopuszczenie aby zawierał znaki A...B...C... lub ich kombinacje AA,AB,AC? 
 

[A=400009][B=400019][C=401009]


 

[AA=400009][AB=400019][AC=401009]

 

Link do komentarza
Share on other sites

(edytowany)

@ethanak jesteś miliony wart 😄 próbowałem z dodatkowymi operatorami, nie potrzebnie. Ostateczna formuła wygląda tak
 

^(([A-Z]{1,2})\=\d{2,8})+$

Pozbyłem się sprawdzania nawiasów kwadratowych gdyż jest to testowane wcześniej w programie, @FlyingDutch i @ethanak DZIĘKUJĘ 

Edytowano przez _LM_
  • Lubię! 1
Link do komentarza
Share on other sites

30 minut temu, _LM_ napisał:

Pozbyłem się sprawdzania nawiasów kwadratowych gdyż jest to testowane wcześniej w programie

aa o to chodzi pewnie, na tym etapie mam już wylistowane rekordy 

Link do komentarza
Share on other sites

(edytowany)

Jeśli komuś chce się robić analizę, w sumie jestem wam to winien
 

Private Sub tfArgs_FocusChanged (HasFocus As Boolean)
	
'	Log($"focus ${HasFocus}"$)
	If HasFocus Then
		tfArgs.Color = xui.Color_Green
	End If

	Dim indexList As List
	indexList.Initialize

	
	If HasFocus = False Then
		If tfArgs.Text.Length = 0 Then
			tfArgs.Color = xui.Color_Red
			Return
		End If
		tfArgs.Text = tfArgs.Text.ToUpperCase	
		Dim str As String = tfArgs.Text.Replace(" ","")
			
		Dim nrArgs,licznik As Int 
		 	
		
		If str.CharAt(0) <> "[" Or str.CharAt(str.Length - 1) <> "]" Then
			tfArgs.Color = xui.Color_Red ' sprawdzam wstępnie czy ciąg odpowiednio rozpoczęty i zakończony
			Return
		End If	

		Dim startIdx,stopIdx As Int

		For i = 0 To str.Length - 1
		If str.CharAt(i) = "["	Then
			nrArgs = nrArgs + 1
			licznik = licznik + 1		
			startIdx = i
			Else If str.CharAt(i) = "]" Then
				stopIdx = i
				licznik = licznik - 1
				indexList.Add(str.SubString2(startIdx+1,stopIdx))
			End If
		Next
		
		' to do dopisac regex
		
		If licznik <> 0 Then
			tfArgs.Color = xui.Color_Red ' niepoprawna ilosc nawiasów
		Return
		End If	
		
'		Log(indexList.Size)
		For i = 0 To indexList.Size - 1
			
'			Log(indexList.Get(i))
			If Regex.IsMatch("^(([A-Z]{1,2})\=\d{2,7})+$", indexList.Get(i)) = False Then
				tfArgs.Color = xui.Color_Red ' niepoprawna ilosc nawiasów
				Return
			End If
		Next
	' wyczysc mape z wszystkich wartości, jeśli dotarliśmy do tego miejsca znaczy że wszystkie składniki są OK 	
	' mozna od nowa zapisać mapę 
	mathComponents.Clear
			For i = 0 To indexList.Size - 1
	Dim keyValue() As String
			keyValue = Regex.Split("=",indexList.Get(i))
			mathComponents.Put(keyValue(0),keyValue(1))
	Next
		For i = 0 To mathComponents.Size - 1
			Log("Key: " & mathComponents.GetKeyAt(i))
			Log("Value: " & mathComponents.GetValueAt(i))
		Next
	'	Log($"Nr ARGS  ${nrArgs} licznik ${licznik}"$)
	End If
End Sub

java_f4MTY1glIs.thumb.png.ca649da5f2008b9415c0a41a4f84d973.png

Zielone pole "składniki" oznacza że walidacja przebiegła poprawnie 

Edytowano przez _LM_
Link do komentarza
Share on other sites

Przepracowujesz się 😉 Lepszym rozwiązaniem byłoby zmienienie środowiska na coś bardziej przyjaznego programiście, ale co ja tam wiem...

Wtedy dostałbyś dostęp do czegoś takiego: https://www.antlr.org/ i nie musiałbyś kombinować z kilometrami regexów 😉 Btw. są dwa moje "artykuły" o nim na Forbocie (hasło: ANTLR4)

Ale to tylko moja opinia (jestem hejterem VB) [i nie mam pełnego poglądu na zastosowanie]

Edytowano przez H1M4W4R1
Link do komentarza
Share on other sites

(edytowany)

Nie mówię że nigdy i nie, jest tutaj taki fajny kurs QT hmm 🤔 A dobra widzę twoje artykuły, więc jeszcze inna opcja od QT. Zapoznam się 

Edytowano przez _LM_
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.