Regex długość stringa + polskie znaki

0

Witam

Mam pytanko. Napisałem regexa który sprawdza czy długość znaków mieści się w przedziale. Natomiast jest problem z polskimi znakami, ponieważ wtedy długość jest podawana nie poprawna gdyż polski znak liczy jako 2 a nie jeden.

Regex wygląda tak:

 ^\s*([^\s]\s*){600,2000}$

Czy ktoś ma pomysł jak to naprawić ?

0

ponieważ wtedy długość jest podawana nie poprawna gdyż polski znak liczy jako 2 a nie jeden

Masz coś z kodowaniem. Nie używaj UTF-8, przekonwertuj na UTF-16.
No i pokaż kod.

0

Hmm używam tego w szablonie xslt - nagłówek szablonu to:

 
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="remove" xmlns:asp="remove" xmlns:telerik="remove" version="1.0">
   <xsl:output method="html" indent="no" />

Dodatkowo osadziłem w szablonie kontrolkę asp.net RegularExpressionValidator który przyjmuje wyżej wymienionego Regexa. Jak zmienie z encoding="UTF-8" na encoding="UTF-16" nie moge wczytać szablonu, gdyż wywala mi błąd "Brak znacznika kolejności bajtów UNICODE"

1

Podaj pełny kod z przykładem, bo jak dla mnie to coś wciskasz kit, albo źle napisałeś wyrażanie regularne, względnie źle wczytujesz ten tekst.
Samo wyrażenie regularne działa normalnie i nie jest wrażliwe na polskie znaki:
http://ideone.com/ad8dCQ

0

Ale podać CI cały kod czego ? XSLT czy aspx na którym mam osadzony XSLT ?

Ten sam problem występuje w Notepad++ gdzie gdy wpisze 'o' to mam length=1 a przy 'ó' mam length = 2

0

No to d..a, jak nie wiesz co pokazać, to sorry, ale na tym forum jasnowidzów brak, więc twoje szanse na uzyskanie senesowej pomocy są prawie zerowe.
Założyłeś wątek w C# .Net i ja ci udowodniłem, że w C# nie ma takiego problemu jak opisałeś.

0

Pewnie przydała by się wersja XSLT. Jeśli jest to XSLT 2.0 to jakiej dodatkowej biblioteki do tego używasz?
Dodatkowo pewnie potrzeba sam kod XSLT i co tam jeszcze uważasz za istotne. Bo że to nie winda .NET to już wiemy. :)

1

Ten sam problem występuje w Notepad++ gdzie gdy wpisze 'o' to mam length=1 a przy 'ó' mam length = 2.

Ale to już wina notepada++ a nie regexa. Regex jest dobry, nie ma co w regexie poprawiać.

0

Dzięki. W wpisie sugerują użyć funkcji translate w xslt, natomiast ja w moim przykładzie chcę sprawdzać długość wpisanych znaków przez użytkownika na wyświetlonym formularzu generowanym w xslt. Dlatego pobierane przeze mnie dane z pola musza być aktualne a nie zaczytane poprzednio z xml.

0

Juz wiem Panowie co powoduje błąd, tylko nie wiem jak go naprawić. A więc mam kontrolkę radEditor od telerika + mój validator, natomiast gdy validator ściąga tekst z kontrolki to bierze go wraz z kodem html który ustalił sobie uzytkownik w trakcie edycji tekstu. Teraz rozwiazaniem moze byc napisanie regexa ktory pominie znaczniki html, lub cos innego. Co polecicie ??

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