Строка обрезки в JavaScript?
Как обрезать строку в JavaScript?
Ответы
Ответ 1
Все браузеры начиная с IE9+ имеют метод trim()
для строк.
Для тех браузеров, которые не поддерживают trim()
, вы можете использовать этот полизаполнение из MDN:
if (!String.prototype.trim) {
(function() {
// Make sure we trim BOM and NBSP
var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
String.prototype.trim = function() {
return this.replace(rtrim, '');
};
})();
}
Тем не менее, при использовании jQuery
, $.trim(str)
также доступен и обрабатывает undefined/null.
Смотрите это:
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');};
String.prototype.ltrim=function(){return this.replace(/^\s+/,'');};
String.prototype.rtrim=function(){return this.replace(/\s+$/,'');};
String.prototype.fulltrim=function(){return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');};
Ответ 2
Обрезка из jQuery удобна, если вы уже используете эту фреймворк.
$.trim(' your string ');
Я часто использую jQuery, поэтому обрезка строк с ним естественна для меня. Но возможно ли, что есть реакция на jQuery?:)
Ответ 3
Хотя есть несколько правильных ответов выше, следует отметить, что объект String
в JavaScript имеет собственный метод .trim()
по сравнению с ECMAScript 5. Таким образом, в идеале любая попытка прототипа метода обрезки должна действительно проверять если он уже существует первым.
if(!String.prototype.trim){
String.prototype.trim = function(){
return this.replace(/^\s+|\s+$/g,'');
};
}
Добавлен изначально в:
JavaScript 1.8.1/ECMAScript 5
Таким образом поддерживается в:
Firefox: 3.5 +
Safari: 5 +
Internet Explorer: IE9 + (только в режиме стандартов!) http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx
Chrome: 5 +
Opera: 10.5 +
Таблица поддержки поддержки ECMAScript 5: http://kangax.github.com/es5-compat-table/
Ответ 4
Существует множество реализаций, которые можно использовать. Наиболее очевидным кажется что-то вроде этого:
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, "");
};
" foo bar ".trim(); // "foo bar"
Ответ 5
Простая версия здесь Что такое общая функция для обрезки JavaScript?
function trim(str) {
return str.replace(/^\s+|\s+$/g,"");
}
Ответ 6
Я знаю, что этот вопрос задан на три года назад. Теперь был добавлен изначально в JavaScript. Для экземпляра вы можете обрезать непосредственно, как показано ниже,
document.getElementById("id").value.trim();
Ответ 7
Если вы используете jQuery, используйте jQuery.trim()
. Например:
if( jQuery.trim(StringVariable) == '')
Ответ 8
Flagrant Badassery имеет 11 различных планок с контрольной информацией:
http://blog.stevenlevithan.com/archives/faster-trim-javascript
Неудивительно, что regexp-based медленнее, чем традиционный цикл.
Вот мой личный. Этот код устарел! Я написал его для JavaScript1.1 и Netscape 3, и с тех пор он немного обновлялся. (Оригинал используется String.charAt)
/**
* Trim string. Actually trims all control characters.
* Ignores fancy Unicode spaces. Forces to string.
*/
function trim(str) {
str = str.toString();
var begin = 0;
var end = str.length - 1;
while (begin <= end && str.charCodeAt(begin) < 33) { ++begin; }
while (end > begin && str.charCodeAt(end) < 33) { --end; }
return str.substr(begin, end - begin + 1);
}
Ответ 9
Используйте собственные методы JavaScript: String.trimLeft()
, String.trimRight()
и String.trim()
.
String.trim()
поддерживается в IE9 + и всех других основных браузерах:
' Hello '.trim() //-> 'Hello'
String.trimLeft()
и String.trimRight()
являются нестандартными, но поддерживаются в всех основных браузерах, кроме IE.
' Hello '.trimLeft() //-> 'Hello '
' Hello '.trimRight() //-> ' Hello'
Поддержка IE с помощью polyfill проста:
if (!''.trimLeft) {
String.prototype.trimLeft = function() {
return this.replace(/^\s+/,'');
};
String.prototype.trimRight = function() {
return this.replace(/\s+$/,'');
};
if (!''.trim) {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
};
}
}
Ответ 10
В настоящее время вы можете использовать string.trim(), который является встроенной реализацией Javascript
var orig = " foo ";
console.log(orig.trim());//foo
См. также
Ответ 11
String.prototype.trim = String.prototype.trim || function () {
return this.replace(/^\s+|\s+$/g, "");
};
String.prototype.trimLeft = String.prototype.trimLeft || function () {
return this.replace(/^\s+/, "");
};
String.prototype.trimRight = String.prototype.trimRight || function () {
return this.replace(/\s+$/, "");
};
String.prototype.trimFull = String.prototype.trimFull || function () {
return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g, "").replace(/\s+/g, " ");
};
Бесстыдно украден из Matt duereg.
Ответ 12
Код обрезки angular js project
var trim = (function() {
// if a reference is a `String`.
function isString(value){
return typeof value == 'string';
}
// native trim is way faster: http://jsperf.com/angular-trim-test
// but IE doesn't have it... :-(
// TODO: we should move this into IE/ES5 polyfill
if (!String.prototype.trim) {
return function(value) {
return isString(value) ?
value.replace(/^\s*/, '').replace(/\s*$/, '') : value;
};
}
return function(value) {
return isString(value) ? value.trim() : value;
};
})();
и назовите его trim(" hello ")
Ответ 13
используйте просто код
var str = " Hello World! ";
alert(str.trim());
Поддержка браузера
Feature Chrome Firefox Internet Explorer Opera Safari Edge
Basic support (Yes) 3.5 9 10.5 5 ?
Для старого браузера добавить прототип
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
Ответ 14
Здесь очень простой способ:
function removeSpaces(string){
return string.split(' ').join('');
}
Ответ 15
Вы можете просто объявить свою переменную как строку и использовать ее функцию обрезки:
var str = new String('my string');
str= str.trim();
Ответ 16
Сегодня почти каждый браузер поддерживает String.prototype.trim()
.
Вы используете его следующим образом:
var origStr = ' foo ';
var newStr = origStr.trim(); // Value of newStr becomes 'foo'
Если вам все-таки понадобится поддержка старого браузера, который не поддерживает эту функцию, это a polyfill, предложенный MDN:
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
Ответ 17
Использование trim()
для String, которая является нативной, может быть самым простым способом:
const fullName = " Alireza Dezfoolian ";
const trimmedFullName = fullName.trim();
console.log(trimmedFullName);
Ответ 18
У меня есть lib, который использует trim. поэтому решил это, используя следующий код.
String.prototype.trim = String.prototype.trim || function(){ return jQuery.trim(this); };
Ответ 19
if(!String.prototype.trim){
String.prototype.trim = function(){
return this.replace(/^\s+|\s+$/gm,'');
};
}
Из предыдущих ответов он отличается добавлением флага m
.
Флаг m
будет искать текст нескольких линейных. В этом режиме отметка начала и конца шаблона (^
$
) вставлена до и после символа новой строки (\n
).
Ответ 20
Не знаю, какие ошибки могут скрываться здесь, но я использую это:
var some_string_with_extra_spaces=" goes here "
console.log(some_string_with_extra_spaces.match(/\S.*\S|\S/)[0])
Или это, если текст содержит:
console.log(some_string_with_extra_spaces.match(/\S[\s\S]*\S|\S/)[0])
Еще одна попытка:
console.log(some_string_with_extra_spaces.match(/^\s*(.*?)\s*$/)[1])
Ответ 21
Здесь он находится в TypeScript:
var trim: (input: string) => string = String.prototype.trim
? ((input: string) : string => {
return (input || "").trim();
})
: ((input: string) : string => {
return (input || "").replace(/^\s+|\s+$/g,"");
})
Он будет возвращаться к регулярному выражению, если родной прототип недоступен.
Ответ 22
Я написал эту функцию для обрезки, когда функция .trim() была недоступна в JS еще в 2008 году. Некоторые из старых браузеров по-прежнему не поддерживают функцию .trim(), и я надеюсь, что эта функция может помочь кто-то.
ФУНКЦИЯ TRIM
function trim(str)
{
var startpatt = /^\s/;
var endpatt = /\s$/;
while(str.search(startpatt) == 0)
str = str.substring(1, str.length);
while(str.search(endpatt) == str.length-1)
str = str.substring(0, str.length-1);
return str;
}
Объяснение. Функция trim() принимает строковый объект и удаляет любые начальные и конечные пробелы (пробелы, вкладки и символы новой строки) и возвращает обрезанную строку. Вы можете использовать эту функцию, чтобы обрезать входные данные форм, чтобы обеспечить отправку достоверных данных.
В качестве примера функцию можно вызвать следующим образом.
form.elements[i].value = trim(form.elements[i].value);
Ответ 23
Вы можете сделать это, используя простой JavaScript:
function trimString(str, maxLen) {
if (str.length <= maxLen) {
return str;
}
var trimmed = str.substr(0, maxLen);
return trimmed.substr(0, trimmed.lastIndexOf(' ')) + '…';
}
// Let test it
sentenceOne = "too short";
sentencetwo = "more than the max length";
console.log(trimString(sentenceOne, 15));
console.log(trimString(sentencetwo, 15));
Ответ 24
my использует одно регулярное выражение для поиска случаев, когда требуется обрезка, и использует результаты этого регулярного выражения для определения требуемых границ подстроки:
var illmatch= /^(\s*)(?:.*?)(\s*)$/
function strip(me){
var match= illmatch.exec(me)
if(match && (match[1].length || match[2].length)){
me= me.substring(match[1].length, p.length-match[2].length)
}
return me
}
одно дизайнерское решение, которое входило в это, использовало подстроку для выполнения окончательного захвата. s/\?://(сделать захват среднего значения), а заменяющий фрагмент будет выглядеть следующим образом:
if(match && (match[1].length || match[3].length)){
me= match[2]
}
есть две ставки производительности, которые я сделал в этих импланах:
-
выполняет ли реализация подстроки исходные данные строки? если это так, то в первом случае, когда строка должна быть обрезана, происходит двойное обход, сначала в регулярном выражении (которое, возможно, должно быть частичным), и второе в извлечении подстроки. мы надеемся, что реализация подстроки ссылается только на исходную строку, поэтому операции, подобные подстроке, могут быть почти бесплатными. крест-пальцы
-
Насколько хорош захват в regex impl? средний срок, выходное значение, потенциально может быть очень большим. я не был готов к банку, что все захваты regex impls не будут препятствовать захвату ввода нескольких сотен KB, но я также не тестировал (слишком много времени выполнения, извините!). второй ВСЕГДА запускает захват; если ваш движок может сделать это без хита, возможно, используя некоторые из вышеперечисленных методов построения строк, обязательно используйте USE IT!
Ответ 25
Для IE9 + и других браузеров
function trim(text) {
return (text == null) ? '' : ''.trim.call(text);
}