2016-07-07 10 views
3

Как бы то ни было, numericInput принимает как строковые, так и числовые входы. Если строка введена, она преобразуется в NA (попробуйте использовать код ниже). Есть ли способ не позволить пользователю вводить строку в числовом поле в блестящей форме?Ограничить тип ввода в блестящем поле

ui <- fluidPage(
    numericInput("num", label = "text not allowed", value = 1), 
    verbatimTextOutput("value") 
) 

server <- function(input, output) { 
    output$value <- renderPrint({ input$num })  
} 

shinyApp(ui = ui, server = server) 

До сих пор я добавил вывод текста рядом с цифровой вход, который предупреждает пользователя о том, что только цифры принимаются, если она входит в строку в numericInput поле. Это решение далеко не идеально для меня.

Я хочу, чтобы пользователь не мог ввести значение символа в числовое поле.

ответ

5

Вы можете добавить validate к своему выражению, так что допускаются только числовые входы. Я использую Windows 7 64-бит с Google Chrome (IE будет работать тоже)

Примечание: Блестящая версия 0.13.2, не работает в Firefox.

rm(list = ls()) 
library(shiny) 
ui <- fluidPage(
    numericInput("num", label = "text not allowed", value = 1), 
    verbatimTextOutput("value") 
) 
server <- function(input, output) { 

    numbers <- reactive({ 
    validate(
     need(is.numeric(input$num), "Please input a number") 
    ) 
    }) 
    output$value <- renderPrint({ numbers() })  
} 
shinyApp(ui = ui, server = server) 
+0

спасибо за ответ, но я ищу способ не допускать ввода строки в числовое поле. Что-то вроде аргумента 'numeric_only = T' в' numericInput'. Я хочу, чтобы пользователю было невозможно ввести значение символа в числовое поле. –

+0

Как вы можете видеть, нет способа ввести символ в это поле. Я не вижу, что вы получаете от –

+0

. Какую версию «блестящего» вы используете, Im on '0.13.2'? Пожалуйста, обновите –

0

ИМА, самый простой способ добиться этого, этого добавление наблюдателя ввода данных, и при обнаружении запрещено знак (что, вероятно, требует своей собственной функции обнаружения запрещенных признаков), просто удалите его формой ввода с помощью функции updateInput ,

Update:

observe({ 

if(is.null(input$myTextInput)) { 
    vec <- NULL 
    return() 
} else vec <- input$myTextInput 

    vec <- removeForbiddenSignsFunction(vec) 

    updateTextInput(session, "myTextInput", value = vec) 
}) 

Пример удаление запрещенной функции знаков (это один удаляет знаки, запрещенные в именах файлов Windows):

removeForbiddenSignsFunction <- function(vec) { 
    forbidden <- c("|", "?", "*") 
    notAllowed <- c(">", "<", ":","/"," ") 


    for(i in 1:length(forbidden)) { 
    if(grepl(paste0("\\",forbidden[i]),vec)) { 
     vec <- sub(paste0("\\",forbidden[i]),"",vec) 
    } 
    } 

    for(i in 1:length(notAllowed)) { 
    if(grepl(notAllowed[i],vec)) { 
     vec <- sub(notAllowed[i],"",vec) 
    } 
    } 

    if(grepl("\\\\",vec)) vec <- sub("\\\\","",vec) 
    if(grepl("\"",vec)) vec <- sub("\"","",vec) 

    return(vec) 
} 

Он расщепленный для запрещался и notAllowed из-за REGEX специальных знаков (не разрешено в регулярных выражениях и именах файлов Windows).

+0

Включите пример использования? – iyop45

+0

Это хорошее решение, хотя технически это не отключает ввод строки. –

+0

Конечно, iyop45. Я добавил некоторое обновление для предыдущего сообщения, как вы можете видеть. –