En ce qui concerne votre tentative de vérifier s'il y a un URL dans la zone de texte.
if ($('textarea[name="test"]').val().indexOf('[url') >= 0 ||
$('textarea[name="test"]').val().match(/^http([s]?):\/\/.*/) ||
$('textarea[name="test"]').val().match(/^www.[0-9a-zA-Z',-]./)) {
Tout d'abord, plutôt que d'obtenir la valeur textarea trois fois en utilisant la fonction plusieurs appels, il serait préférable de le stocker dans une variable avant la vérification, soit
var value = $('textarea[name="test"]').val();
Le /^http([s]?):\/\/.*/
, en raison de la ^
sera ne correspond que si le "http: // ..." est trouvé au début de la valeur textarea. La même chose s'applique à la ^www.
. L'ajout de l'indicateur multiligne m
à la fin de l'expression régulière ferait ^
correspondre au début de chaque ligne, plutôt que juste le début de la chaîne.
Le .*
dans /^http([s]?):\/\/.*/
ne sert à rien car il correspond à zéro ou plusieurs caractères. Le ([s]?)
est meilleur que s?
.
En /^www.[0-9a-zA-Z',-]./
, les .
a besoin d'être backslashé pour une .
littérale si telle est votre intention, à savoir \.
, et je suppose que vous voulez dire correspondre plus d'un des personnages de la classe de caractères de sorte que vous devez suivre avec +
.
Il est plus efficace d'utiliser la méthode RegExp test
plutôt que match
lorsque les matchs réels ne sont pas nécessaires, donc, en combinant ce qui précède, vous pourriez avoir
if (/^(\[url|https?:\/\/|www\.)/m.test(value)) {
Il y a peu de point dans le contrôle de toute façon si vous ne l'utilisez pour décider si vous avez besoin d'appeler replace
, parce que le chèque est implicite dans le même
appel replace
en utilisant les critères simples que les chaînes de caractères non-espace au début d'une ligne et commençant par http[s]://
, [url
ou www.
, doivent être enlevés, vous pouvez utiliser
value = value.replace(/^(?:https?:\/\/|\[url|www\.)\S+\s*/gm, '');
Si les urls peuvent apparaître partout où vous pouvez utiliser \b
, ce qui signifie limite de mot, au lieu de ^
, et enlever le drapeau m
.
value = value.replace(/(?:\bhttps?:\/\/|\bwww\.|\[url)\S+\s*/g, '');
Ce serait un gaspillage d'efforts pour essayer d'offrir une meilleure solution regex sans détails précis de ce que les formes d'URL peuvent apparaître dans la zone de texte, où ils peuvent apparaître et quels personnages peuvent les jouxtent.
Si une URL valide peut apparaître partout dans la zone de texte et être entouré par des autres personnages qu'il n'y a pas de solution étanche à l'eau.
duplication possible de [Regex pour faire correspondre URL] (http://stackoverflow.com/questions/1141848/regex-to-match-url) – JJJ
N'oubliez pas de faire cette vérification sur le côté serveur aussi. Javascript peut être désactivé sur le client. – ZippyV
@ZippyV J'essaie juste d'améliorer mon script côté client; Les vérifications PHP sont déjà en vigueur. –