【问题标题】:"illegal character" error when Watir execute_scriptWatir execute_script 时出现“非法字符”错误
【发布时间】:2016-05-05 00:58:36
【问题描述】:

我正在通过用户界面中的文本区域获取 JavaScript 代码,然后在我的应用程序中执行代码,如下所示:

用户输入:

text = 'I am fine!!! ';
return text.replace(/(.+)\s+$/g, '$1’);

但是,在 Rails 中,转义字符会添加到文本区域中的用户输入中:

"text = 'hello how are you? ';\\d\r\nreturn text.replace(/(.+)\\s+$/g, '$1’);"

所以 execute_script 语句给出了“非法字符”错误。

browser.execute_script("text = 'hello how are you? ';\\d\r\nreturn text.replace(/(.+)\\s+$/g, '$1’);")

如何在不使用正则表达式的情况下摆脱转义字符,以便 execute_script 运行良好?

【问题讨论】:

  • 我不明白你在做什么或为什么。用户通常不会输入 javascript。

标签: javascript ruby-on-rails webdriver watir-webdriver


【解决方案1】:

看看这个:

browser.execute_script("text = 'hello how are you? '; return text.replace(/(.+)\\s+$/g, '$1');")

但是!你到底为什么需要它?

这是一个非常奇怪的案例,我在 Dave 的评论中添加了 +1。做一些 javascript 魔术不是典型的用户操作。试着再想想你在做什么。

【讨论】:

    【解决方案2】:

    您是否考虑过为此尝试String#gsub!? 以下是我可能会采用的方法:

    test = "\\d\r\nreturn text.replace(/(.+)\\s+$/g, '$1’);"
    => "\\d\r\nreturn text.replace(/(.+)\\s+$/g, '$1’)"
    test.gsub!(/[\d\n\r\\d]/, '')
    => "return text.replace(/(.+)s+$/"
    

    如果不想覆盖,也可以使用String#gsub,返回修改后的副本

    test.gsub(/[\d\n\r\\d]/, '')
    => "return text.replace(/(.+)s+$/"
    

    您显然可以自定义正则表达式来自定义您的需求。还要小心智能引号,例如 $1 的右引号,因为 ' 不同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多