In einer iPhone-App, die ich entwickle, gibt es eine Einstellung, in der Sie eine URL eingeben können. Aufgrund von Form und Funktion muss diese URL sowohl online als auch offline überprüft werden.
Bisher konnte ich keine Methode finden, um die URL zu validieren. Die Frage ist also:
Wie überprüfe ich eine URL-Eingabe auf dem iPhone (Objective-C) sowohl online als auch offline?
Antworten:
Dank dieses Beitrags können Sie die Verwendung von RegexKit vermeiden. Hier ist meine Lösung (funktioniert für die iPhone-Entwicklung mit iOS> 3.0):
Wenn Sie in Swift meine unten angegebene Lösung einchecken möchten:
quelle
((http|https)://)?((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"
Es sollte http: // oder https: // optional sein.Warum nicht stattdessen einfach darauf vertrauen
Foundation.framework
?Das macht den Job und erfordert nicht
RegexKit
:Laut Apple-Dokumentation:
quelle
http://www.aol.comhttp://www.nytimes.com
diesen Test.NSURL
gibt nicht null zurück, wenn ich eine Zeichenfolge von @ "# @ # @ $ ##% $ # $ #" oder @ "tp: / fdfdfsfdsf" übergebe. Diese Methode ist also für die Überprüfung gültiger HTTP-URLs und dergleichen unbrauchbar.Verlassen Sie sich auf die von Apple, anstatt Ihre eigenen regulären Ausdrücke zu schreiben. Ich habe eine Kategorie
NSString
verwendetNSDataDetector
, um das Vorhandensein eines Links in einer Zeichenfolge zu testen. Wenn der Bereich des gefundenen LinksNSDataDetector
der Länge der gesamten Zeichenfolge entspricht, handelt es sich um eine gültige URL.quelle
Meine Lösung mit Swift :
Zum Test:
Ergebnisse:
quelle
benutze das-
quelle
www.google.com/+gplusname
Ich habe das Problem mit RegexKit gelöst und einen schnellen regulären Ausdruck erstellt , um eine URL zu validieren.
Dann überprüfe ich, ob der MatchingString dem SubjectString entspricht und ob die URL gültig ist :)
Korrigiere mich, wenn mein Regex falsch ist;)
quelle
Seltsamerweise habe ich hier keine wirklich einfache Lösung gefunden, aber trotzdem gute Arbeit für die Handhabung
http
/https
Links geleistet .Denken Sie daran, dies ist keine perfekte Lösung, aber es hat für die folgenden Fälle funktioniert. Zusammenfassend testet der Regex, ob die URL mit
http://
oder beginnt, suchthttps://
dann nach mindestens 1 Zeichen, sucht dann nach einem Punkt und prüft dann erneut nach mindestens 1 Zeichen. Keine Leerzeichen erlaubt.GÜLTIG gegen diese URLs getestet:
UNGÜLTIG gegen diese URLs getestet:
Quelle der URLs: https://mathiasbynens.be/demo/url-regex
quelle
Sie können dies verwenden, wenn Sie nicht möchten
http
oderhttps
oderwww
Beispiel
Ausgabe:
quelle
Lefakirs Lösung hat ein Problem. Seine Regex kann nicht mit " http://instagram.com/p/4Mz3dTJ-ra/ " übereinstimmen . Die URL-Komponente hat einen kombinierten numerischen und wörtlichen Charakter. Seine Regex scheitern an solchen URLs.
Hier ist meine Verbesserung.
quelle
Ich habe festgestellt, dass dies am einfachsten ist:
quelle
NSURL
sodass diese stattdessen überprüft werden kann. Und trotzdem verwendet es die alte API.Mit dem folgenden Code können Sie die gültigen URLs finden
für solche URLs
quelle
Die genehmigte Antwort ist falsch. Ich habe eine URL mit einem "-" und die Validierung schlägt fehl.
quelle
Tweeked Vaibhavs Antwort zur Unterstützung von G + -Links:
NSString *urlRegEx = @"http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-\\+ ./?%&=]*)?";
quelle
Einige URLs ohne / am Ende werden in den obigen Lösungen nicht als die richtige erkannt. Das könnte also hilfreich sein.
quelle
URL-Validierung in Swift
Einzelheiten
Xcode 8.2.1, Swift 3
Code
Verwendung
Ergebnis
quelle
Ziel c
Hoffe das hilft!
quelle
Wollten Sie überprüfen, ob der vom Benutzer eingegebene URL ist? Es kann so einfach wie ein regulärer Ausdruck sein, zum Beispiel zu überprüfen, ob die Zeichenfolge enthält
www.
(auf diese Weise prüft Yahoo Messenger, ob der Benutzerstatus ein Link ist oder nicht).Hoffe, dass dies hilft
quelle
Selbstsüchtig würde ich vorschlagen, eine
KSURLFormatter
Instanz zu verwenden, um Eingaben zu validieren und sie in etwas zu konvertieren, das sie verarbeitenNSURL
kann.quelle
Ich habe eine geerbte Klasse von UITextField erstellt, die alle Arten von Validierungen mithilfe von Regex-Zeichenfolgen verarbeiten kann. In diesem Fall müssen Sie ihnen nur die gesamte Regex-Zeichenfolge nacheinander und ihre Nachricht geben, die Sie anzeigen möchten, wenn die Validierung fehlschlägt. Sie können meinen Blog für weitere Informationen überprüfen, es wird Ihnen wirklich helfen
http://dhawaldawar.wordpress.com/2014/06/11/uitextfield-validation-ios/
quelle
Als ich @ Anthonys Antwort auf Swift erweiterte, schrieb ich eine Kategorie, für
String
die ein optionales zurückgegeben wirdNSURL
. Der Rückgabewert ist,nil
wennString
nicht überprüft werden kann, ob es sich um eine URL handelt.quelle
quelle