Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SOLVED] Wyrażenia regularne
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
perhydrol
Witam,

mam problem z zbudowaniem wyrażenia regularnego dla JavaScriptu, umożliwiające sprawdzenie czy dany ciąg zawiera zakres MIN/MAX cyfr

czyli w zadnym ciągu dopuszczamy wystąpienie Minimum 2 cyfr ale nie więcej niż 4 cyfry

([^0-9]*[0-9][^0-9]*){2,4}

sprawdzając wyrażenie regularne testerem, zwraca pożądany wynik, natomiast po wywołaniu w JS, niestety już nie :/
Może przez to że tester On-Line, napisany zapewne jest w PHP questionmark.gif
Tester: http://www.regexplanet.com/simple/index.html


Niestety słaby jestem jeśli chodzi o JS, będę wdzięczny za jakąkolwiek pomoc
perhydrol
niestety nadal nie udało mi się rozwiązać problemu -pomimo ciekawego linku :/
darko
Nie powinno być:

^\d{2,4}$

?

Poniżej tak na prędko tester autorstwa mojej skromnej osoby:
  1. <form method="POST">
  2. <input type="text" name="regexp" id="regexp" value="<?php echo @str_replace("\\\\", "\\", $_POST['regexp']);?>" />
  3. <input type="text" name="target" id="target" value="<?php echo @str_replace("\\\\", "\\", $_POST['target']);?>" />
  4. <input type="submit" value="check" />
  5. </form>
  6. <script type="text/javascript">
  7. if(new RegExp('<?php echo $_POST['regexp'];?>'.replace('\\\\', '\\')).test('<?php echo $_POST['target']?>'))
  8. document.write('<p style="color:green">pasuje do wzorca</p>');
  9. else
  10. document.write('<p style="color:red">nie pasuje do wzorca</p>');
perhydrol
Super,


jednak jak zwykle słabo sprecyzowałem treść postu,

więc chodzi mi o sprawdzenie czy w wybranym ciągu np: "P@ssw0rd_1trzy_wystapienia2_cyfry"
występuje Minimum 2 cyfry ale nie więcej niż 4 cyfry na dowolnej pozycji.
Niestety "darko" wyrażenie regularne "^[0-9]{2,4}$" nie spełni tego warunku dopasowania :/

natomiast wyrażenie jakie ja podałem tj. ([^0-9]*[0-9][^0-9]*){2,4}
działa poprawnie w testerze: http://www.regexplanet.com/simple/index.html
ponieważ jak śmiem przypuszczać użyta została funkcja z PHP "preg_mach()", która zwraca ilość dopasowań -no chyba że się mylę questionmark.gif?

choć z drugiej strony jeśli wywołuję w JS warunek, po każdym dopisaniu znaku w polu input:

  1. var string = "P@ssw0rd_1trzy_wystapienia2_cyfry";
  2. var regex = new RegEgx('/([^0-9]*[0-9][^0-9]*){2,4}/');
  3. if(!regex.test(string)){
  4. alert('Hasło musi posiadać od: 2 do: 4 cyfr');
  5. return false;
  6. }


to teoretycznie powinno działać OK, ale nie działa, ten JS powoli wykańcza mnie tongue.gif

wydaje mi się że sama funkcja "regex.test(string)", nie załatwi mi sprawy :/

OK, coś tam sobie wymyśliłem,


jak by ktoś szukał rozwiązania to podaję wskazówkę, mianowicie funkcja match(), zwraca tablice wystąpień podciągu zgodnego z wyrażeniem, sprawdzamy rozmiar tablicy i mamy ilość wystąpień podciągu w ciągu, czyli w przykładzie cyferek.

wyrażenie:
  1. var regex_digit = /[0-9]/g;


warunek:
  1. var array_digit = haslo.match(regex_digit);
  2. if(array_digit.length < min_digit || array_digit.length > max_digit){
  3. alert('Hasło może zawierać od:'+min_digit+' do:'+max_digit+' cyfr');
  4. return false;
  5. }

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.