Wyrazenia regularne i polskie znaki

0

Witam, napisałem kilka prostych wyrażeń regularnych slużących do walidacji wpisanych w formularzu danych. Niestety nie działają one ze względu na występowanie w formularzu polskich znaków. Kiedy usunę polskie znaki wyrażenia działają ok. Co zrobić żeby polskie znaki również były dopasowywane do wyrażenia?

Z góry dzięki za pomoc.
Pozdrawiam

0

Podaj te wyrażenia. Swoją droga niech zgadnę JavaScript, a nie Java?

0

Koziolek, java dokladnie JSP ;).

Zrobiłem to póki co tak:

boolean go = true;
	String polskie = "[\\x20.a-zA-ZąćęłńóśźżĄĘŁŃÓŚŹŻ]";
	if(!request.getParameter("login").matches("\\w{4,20}"))
		out.print("login");
	if(!request.getParameter("haslo").matches("\\w{6,20}") || !request.getParameter("haslo").equals(request.getParameter("hasloRep")))
		out.print("haslo");
	if(!request.getParameter("email").matches("[a-zA-z.-_]+@[a-z]+([.a-z])+") || !request.getParameter("email").equals(request.getParameter("emailRep")))
		out.print("email");
	if(!request.getParameter("imie").matches(polskie + "{3,20}"))
		out.print("imie");
	if(!request.getParameter("nazwisko").matches(polskie + "{3,20}"))
		out.print("nazwisko");
	if(!request.getParameter("wojewodztwo").matches(polskie + "{3,20}"))
		out.print("wojewodz");
	if(!request.getParameter("miasto").matches(polskie + "{3,20}"))
		out.print("miasto");
	if(!request.getParameter("ulica").matches(polskie + "{3,20}"))
		out.print("ulica");
	if(!request.getParameter("nrDom").matches("[1-9][0-9]*(\\|/)?[0-9]*"))
		out.print("dom");
	if(!request.getParameter("nrTel").matches("\\d{9,12}"))
		out.print("tel");
	if(!request.getParameter("polecajacy").matches("\\d{1,6}"))
		out.print("pol");
	if(!request.getParameter("akceptacja").equals("on"))
		out.print("akcept");
0

Trochę inaczej bym podszedł do tego problemu, ale to inna bajka ;) Generalnie to działa, ale pytanie co idzie w parametrze. Czy dostajesz polskie znaki czy ich odpowiedniki w postaci %cośtam.

0

Koziolek oczywiście miałeś rację. Formularz przesyła mi krzaki zamiast polskich znaków. Nie wiem czemu tak się dzieje. Zarówno w formularzu jak i stronie obsługującej go mam:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
i

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

Dane wprowadzane są również w utf8 ponieważ używam linuxa. Czemu więc tak się dzieje?

0

Konfiguracja serwera i jakieś duperele z protokołami. Swoja drogą wywal te IFy! Taki kod to zło.

class Validator{
	  public static enum Status{VALID,NOT_VALID,EMPTY}

	  private Status status = Status.EMPTY;

	  public Status getStatus(){return status;}

	  public void reset(){status = Status.EMPTY;}

	  public Validator validate(String string, String pattern){

		  if(status == Status.EMPTY || status == Status.VALID){
			  if(!string.matches(pattern)){
				  status = Status.NOT_VALID;
			  }
			  else{
				  status = Status.VALID;
			  }
		  }
		  return this;
	  }
}

Nie lepiej?
Później:



public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String name="Łęcka";
		String pattern="[\\x20.a-zA-ZąćęłńóśźżĄĘŁŃÓŚŹŻ]{3,20}";
		Validator validator = new Validator();
		validator.validate(name, pattern);
		System.out.println(validator.getStatus());
		validator.reset();
		System.out.println(validator.getStatus());
		validator.validate(name, pattern).validate("423423", pattern);
		System.out.println(validator.getStatus());
	}
}

Wygląda zdecydowanie ładniej niż kilkanaście ifów.

0

Hej calm. Jeśli nadal masz krzaczki zamiast polkich znaków, to napisz filtr.
Klasa rozszerza klasę ServeltFilter i zamienia znaki kodowane w asciii (np. wpisane z klawiatury) na UTF-8. Nie mam pod reką swojego kodu, ale jest to opisane na stronce tomcata:

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

Powinno pomóc.

Pozdrawiam.

0

Dziękuję Wam bardzo Panowie za odpowiedzi. Postaram się zastosować Wasze uwagi i napisać co z tego wyszło :). Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1