Если для строки может быть всегда доверено, вы можете использовать eval
(или использовать literal_eval
, как было предложено, это безопасно, независимо от того, какая строка.) В противном случае вам нужен синтаксический анализатор. Парсер JSON (например, simplejson) будет работать, если он только когда-либо хранит контент, соответствующий схеме JSON.
Рассмотрим симуляцию поля ввода с фиксированным префиксом или суффиксом с использованием диапазона с рамкой вокруг поля ввода без полей. Вот пример основного запуска:
.currencyinput {
border: 1px inset #ccc;
}
.currencyinput input {
border: 0;
}
<span class="currencyinput">$<input type="text" name="currency"></span>
.currencyinput {
border: 1px inset #ccc;
padding-bottom: 1px;//FOR IE & Chrome
}
.currencyinput input {
border: 0;
}
<span class="currencyinput">$<input type="text" name="currency"></span>
$<input name="currency">
См. также: Ограничение ввода в текстовое поле: разрешение только чисел и десятичной точки
Поместите '$' перед полем ввода текста, а не внутри него. Он делает проверку числовых данных намного проще, потому что вам не нужно разбирать «$» после отправки.
Вы можете с помощью JQuery.validate () (или другие), добавьте некоторые правила проверки на стороне клиента, которые обрабатывают валюту. Это позволит вам иметь «$» внутри поля ввода. Но вам все равно придется выполнять проверку на стороне сервера для обеспечения безопасности, и это возвращает вас к необходимости удалить «$».
Поскольку вы не можете делать ::before
с content: '$'
на входах, а добавление абсолютно позиционированного элемента добавляет дополнительный html - мне нравится делать на фоне SVG inline css.
Это выглядит примерно так:
input {
width: 85px;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='16px' width='85px'><text x='2' y='13' fill='gray' font-size='12' font-family='arial'>$</text></svg>");
padding-left: 12px;
}
Выводит следующее:
Примечание : код должен быть в одной строке. Поддержка очень хороша в современных браузерах, но обязательно проверьте.
background-repeat: no-repeat;
, когда в поле ввода повторялся символ $.
– Hamid
12 February 2018 в 03:03
Для бутстрапа его работы
<span class="form-control">$ <input type="text"/></span>
Не используйте class = "form-control" в поле ввода.
Вы можете обернуть свое поле ввода в диапазон, который вы position:relative;
. Затем вы добавляете с :before
content:"€"
свой символ валюты и делаете его position:absolute
. JSFiddle
HTML
<span class="input-symbol-euro">
<input type="text" />
</span>
CSS
.input-symbol-euro {
position: relative;
}
.input-symbol-euro input {
padding-left:18px;
}
.input-symbol-euro:before {
position: absolute;
top: 0;
content:"€";
left: 5px;
}
Обновление Если вы хотите поместить символ евро либо на левой или правой части текстового поля. Работа JSFiddle
HTML
<span class="input-euro left">
<input type="text" />
</span>
<span class="input-euro right">
<input type="text" />
</span>
CSS
.input-euro {
position: relative;
}
.input-euro.left input {
padding-left:18px;
}
.input-euro.right input {
padding-right:18px;
text-align:end;
}
.input-euro:before {
position: absolute;
top: 0;
content:"€";
}
.input-euro.left:before {
left: 5px;
}
.input-euro.right:before {
right: 5px;
}
Используйте родительский .input-icon
div. Необязательно добавьте .input-icon-right
.
<div class="input-icon">
<input type="text">
<i>$</i>
</div>
<div class="input-icon input-icon-right">
<input type="text">
<i>€</i>
</div>
Выровняйте значок по вертикали с помощью transform
и top
и установите pointer-events
на none
так, чтобы щелчки фокусировались на входе. При необходимости отрегулируйте padding
и width
:
.input-icon {
position: relative;
}
.input-icon > i {
position: absolute;
display: block;
transform: translate(0, -50%);
top: 50%;
pointer-events: none;
width: 25px;
text-align: center;
font-style: normal;
}
.input-icon > input {
padding-left: 25px;
padding-right: 0;
}
.input-icon-right > i {
right: 0;
}
.input-icon-right > input {
padding-left: 0;
padding-right: 25px;
text-align: right;
}
В отличие от принятого ответа, это сохранит подсветку подтверждения ввода, например, красную рамку, если есть ошибка.
Пример использования JSFiddle с помощью Bootstrap и шрифта Awesome
pointer-events:none
, люблю найти маленькие детали, подобные этому
– brichins
6 November 2015 в 16:32
float:left
в input-symbol
div
– kluka
1 August 2016 в 10:03
Другим решением, которое я предпочитаю, является использование дополнительного элемента ввода для изображения символа валюты. Вот пример использования изображения увеличительного стекла в текстовом поле поиска:
html:
<input type="image" alt="Subscribe" src="/graphics/icons/search-button.png">
<input type="text" placeholder="Search" name="query">
css:
#search input[type="image"] {
background-color: transparent;
border: 0 none;
margin-top: 10px;
vertical-align: middle;
margin: 5px 0 0 5px;
position: absolute;
}
Это приводит к вход на левой боковой панели здесь:
Если вам нужно только поддерживать Safari, вы можете сделать это следующим образом:
input.currency:before {
content: attr(data-symbol);
float: left;
color: #aaa;
}
и поле ввода, например
<input class="currency" data-symbol="€" type="number" value="12.9">
Таким образом, вам не нужен дополнительный тег и сохраняйте информацию о символе в разметке.
Ни один из этих ответов не поможет, если вы заинтересованы в выравнивании левой границы с другими текстовыми полями в форме ввода.
Я бы рекомендовал позиционировать знак доллара абсолютно влево около -10px или left 5px (зависит от того, хотите ли вы внутри или вне поля ввода). Внутреннее решение требует направления: rtl на входе css.
Вы также можете добавить дополнение к входу, чтобы избежать направления: rtl, но это изменит ширину входного контейнера, чтобы он не соответствовал другим контейнерам той же ширины.
<div style="display:inline-block">
<div style="position:relative">
<div style="position:absolute; left:-10px;">$</div>
</div>
<input type='text' />
</div>
или
<div style="display:inline-block">
<div style="position:relative">
<div style="position:absolute; left:5px;">$</div>
</div>
<input type='text' style='direction: rtl;' />
</div>
https://i.imgur.com/ajrU0T9.png
Пример: https://plnkr.co/edit/yshyuRMd06K1cuN9tFDv?p=preview