Я написал валидатор URL для проекта, над которым я работаю.Для моих требований это прекрасно работает, за исключением случаев, когда последняя часть для URL длиннее 22 символов, она ломается.Мое выражение:
/((https?):\/\/)([^\s.]+.)+([^\s.]+)(:\d+\/\S+)/i
Ожидается, что ввод будет выглядеть как "http (s): // hostname: port / location".Когда я даю ему ввод:
https://demo10:443/111112222233333444445
, он работает, но если я передаю ввод
https://demo10:443/1111122222333334444455
, он ломаетсяВы можете легко проверить это в http://ryanswanson.com/regexp/#start. Как ни странно, я не могу воспроизвести проблему только с соответствующей (я бы подумал) частью /(:\d+\/\S+)/i
.У меня может быть столько символов после требуемого /, и это прекрасно работает.Любые идеи или известные ошибки?
Редактировать: Вот код для примера приложения, которое демонстрирует проблему:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
private function click():void {
var value:String = input.text;
var matches:Array = value.match(/((https?):\/\/)([^\s.]+.)+([^\s.]+)(:\d+\/\S+)/i);
if(matches == null || matches.length < 1 || matches[0] != value) {
area.text = "No Match";
}
else {
area.text = "Match!!!";
}
}
]]>
</mx:Script>
<mx:TextInput x="10" y="10" id="input"/>
<mx:Button x="178" y="10" label="Button" click="click()"/>
<mx:TextArea x="10" y="40" width="233" height="101" id="area"/>
</mx:Application>