2010-10-18 3 views
4

Я много искал для этого и не могу найти конкретный пример того, что я пытаюсь сделать. В основном я хочу получить значение текстового поля по имени текстового поля (а не id). Затем я хочу удалить ВСЕ пробелы, а не только ведущие или конечные, но и пробелы в тексте. Например, для этого HTML кода:Javascript для удаления пробелов из текстового поля

<INPUT style="TEXT-ALIGN: right;" onkeyup="fieldEdit();" onchange="fieldChange();" NAME="10010input" VALUE="4 376,73" readonly > 

У меня есть этот JavaScript:

var val = document.CashSheet.elements["10010input"].value; 
val2 = val.replace(<someregex>, ''); 
alert(val2); 

Но я попробовал много доступных регулярных выражений выражений, которые удаляют все пробелы, но все только кажется, удалить ведущие и завершающие пробелы , например, значение выше 4 376,73 должно быть указано как 4376,73 в предупреждении выше, но это не так. Изучив это нормальное регулярное выражение для удаления пробелов из текстового поля, содержимое не работает, и я верю в его, потому что оно заполнено польскими локализованными настройками на веб-сервере. Что я \ char/regex exp, мне нужно захватить для «польского пространства», так сказать, в ascii оно появляется как 20, но регулярное выражение exps, которое большинство людей предлагает для пробелов, не захватывает его.

ответ

7

Вы можете использовать document.getElementsByName, чтобы получить элемент, не пройдя через форму, если ни один другой элемент на странице не имеет то же имя. Для того, чтобы заменить все пробелы, просто использовать регулярные выражения с глобальным установленным флагом в replace() методе значение элемента в:

var el = document.getElementsByName("10010input")[0]; 
var val = el.value.replace(/\s/g, ""); 
alert(val); 
+0

Привет Тим, быстрый вопрос, я пытаюсь что вы предлагаете для текстового поля но он не работает, и я верю, потому что он заселен в польских локализованных настройках на веб-сервере. Что мне нужно сделать для «польского пространства», так сказать, в ascii оно появляется как 20, но регулярное выражение не захватывает его, а захватывает другие пробелы, которые я сам вставлял в строку. – TMS

+0

Действительно? Вы уверены, что это не 20 в шестнадцатеричном формате (нормальный пробел - 20 дюймов)? Если вам нужно указать список символов пробела, вы можете сделать что-то вроде 'new RegExp (" [\\ s \ u1234 \ u4321] "," g ")' вместо '/ \ s /'. –

+0

Yep, возвращающийся назад, как «4 376», если я пытаюсь использовать это регулярное выражение, он ничего не делает, но если я добавлю «aa» в конец этой строки, регулярное выражение сделает это следующим образом: «4 376aa ", поэтому он работает на моем пространстве, но не на пространстве, возвращающемся с польского веб-сервера. Я думаю, что это другой символ пространства Юникода, который я попытаюсь найти, который он использует, используя новый вызов RegExp. – TMS

6

Вы должны «обобщать», что регулярное выражение вы используете, так что это применяется ко всем совпадающим вместо просто первый. Например:

val = val.replace(/\s/g, '') 

Обратите внимание на «g», который изменяет регулярное выражение, чтобы оно стало «общим».

+2

+1 для символьного класса '\ s'; Я бы, вероятно, использовал работу «global» вместо «general» –

+1

@Michael: Почему '\ s' значительно лучше, чем просто пробел? В '' не может быть никаких символов разрыва строки, и неразрывные пробелы обычно не печатаются в текстовое поле. –

+0

@ Майкл Харен: Я знал, что это началось с «г», но я не знал, какой именно. @Tim Down: Я думаю, что \ s более читаемо, не так ли? –

0

вы можете использовать этот метод JQuery http://api.jquery.com/jQuery.trim/
val = $.trim(val); ИЛИ val = jQuery.trim(val);

+0

Это удаляет только ведущие и конечные пробелы, а не польские пробелы Unicode внутри строки :( – TMS

3

Вот функция, я использую, чтобы заменить пробелы.

function removeSpaces(val) { 
    return val.split(' ').join(''); 
} 
3

Другой, более jQuery'ish вариант:

$(".stripspaces").keyup(function() { 
    $(this).val($(this).val().replace(/\s/g, "")); 
}); 
+0

Слишком много jQuery ... [Когда использовать Vanilla JavaScript против jQuery?] (Http://stackoverflow.com/questions/4651923/when -to-use-vanilla-javascript-vs-jquery). Кроме того, у всех ответов на этой странице есть главный недостаток: всегда устанавливая значение, карет всегда движется до конца, даже если в поле нет места. лучшее решение будет включать проверку значения ввода в первую очередь. –

+0

спасибо, что это сработало для меня – humphrey

2

Try This

<script language="JavaScript"> 
function RWS(str){ 
    return str.replace(/^\s+/,"").replace(/\s+$/,"").replace(/\s+/g," "); 
} 
</script> 

<form name=f1ex> 
<textarea name="t2" rows="5" onChange="this.value=RWS(this.value)"></textarea> 
</form>