(Drugi post pod rząd, żeby było widać)
Udało mi się wreszcie zainstalować wszelkie instalki i napisać naprędce kompletny przykład prostej walidacji używającej konstruktora RegExp. Działa w Fx 3.6, Operze 10.5 i IE 8:
<!DOCTYPE html>
<html>
<head lang="pl">
<meta charset="utf-8">
<title>4programmers.net: regex syntax validator w JS</title>
<script>
function RegexValidator() {
var _customExceptionMessageMap = {
'unterminated parenthetical': 'niedomknięty nawias [to nie jest domyślny komunikat przeglądarki!]'
}
;
this.validate = function(regexString) {
try {
new RegExp(regexString);
alert('OK! Wyrażenie regularne wygląda na poprawne!');
} catch (e) {
alert('Podane wyrażenie regularne jest niepoprawne.\n' + getExceptionDetails(e));
}
};
function getExceptionDetails(e) {
var customExceptionMessage = getCustomExceptionMessage(e.message);
if (customExceptionMessage) {
return 'Przyczyna błędu: ' + customExceptionMessage;
} else {
return '(brak szczegółów)';
}
}
function getCustomExceptionMessage(message) {
return _customExceptionMessageMap[message] || message;
}
}
window.onload = function() {
var regexInput = document.getElementById('regex')
, checkRegexButton = document.getElementById('check_regex')
, validator = new RegexValidator()
;
checkRegexButton.onclick = validateEnteredRegex;
regexInput.onkeypress = function(evt) {
evt = fixEvent(evt);
if (wasEnterKeyPressed()) {
validateEnteredRegex();
evt.preventDefault(); // enter would trigger checkRegexButton.click in IE
}
function wasEnterKeyPressed() {
var ENTER_KEY_CODE = 13;
return (evt.keyCode || evt.charCode) === ENTER_KEY_CODE;
}
};
function validateEnteredRegex() {
validator.validate(regexInput.value);
regexInput.focus();
}
function fixEvent(evt) {
fixedEvent = evt || window.event;
if (!fixedEvent.preventDefault) {
fixedEvent.preventDefault = function() {
this.returnValue = false;
};
}
return fixedEvent;
}
};
</script>
</head>
<body>
<input type="text" id="regex">
<input type="submit" id="check_regex" value="Sprawdź wyrażenie regularne">
</body>
</html>
edit: Cholera, napisałem ten przykład bez sprawdzenia tego tematu. Twój update posta nie uczynił tematu nie przeczytanym :/. No cóż.
Dodam jeszcze jedną rzecz. Nie wiem, w czym te regexy chcesz wykorzystać. Jeśli chcesz w JavaScripcie sprawdzić regexy, które będą potem używane przez PHP (!), to nie jest to najdokładniejsze rozwiązanie. PHP implementuje PCRE, bardzo dobre regexy oparte o Perlowe. Regexy z JavaScriptu są dużo słabsze. Konstruktor JS może więc nie rozpoznać pewnych wyrażeń regularnych legalnych w PHP -- spanikuje i rzuci wyjątkiem. W takim wypadku można użyć Ajaxa i walidować regexa po stronie serwera.