在python中匹配Javascript转义表单数据

2024-04-25 20:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python(2.7)中使用regex进行一些数据验证。例如,我从客户端(javascript)接收以下字符串:

name = u'B\xf8tte'

我想使用以下模式(或类似模式)来匹配它,只允许A-Z字符,包括拉丁语变体:

pattern = '^([A-Za-z\u00C0-\u00D6\u00D8-\u00f6\u00f8-\u00ff\s]*)$'

在客户端(javascript)完成匹配时,此操作有效,给定值:

var value = 'Bøtte';

这是因为javascript和python转义这类字符(http://www.charbase.com/00f8-unicode-latin-small-letter-o-with-stroke)的方式不同,特别是“\u00f8”和“\xf8”?你知道吗

是否有其他模式可以同时适用于javascript/python?我可能在编码/解码中遗漏了什么?你知道吗

MCVE:

注意,模式在客户端和服务器端都是相同的,并且匹配客户端,但不匹配服务器端。你知道吗

值“Bøtte”匹配(同样,客户端),而“Bøtteひ”不匹配。你知道吗

客户: 你知道吗

<html class="no-js" lang="no">
 <head>
  <meta charset="utf-8">
  <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

  <script type="text/javascript">
    $(document).ready(function() {
      $('form').submit(function(e) {
        e.preventDefault();

        var pattern = '^([A-Za-z\-\.\u00C0-\u00D6\u00D8-\u00f6\u00f8-\u00ff\s]*)$';
        var value = $(this).find('input').val();

        if (new RegExp(pattern).exec(value)) {
          $.ajax({
              type: 'POST',
              url: '/',
              data: $(this).serialize(),
              dataType: 'json',
          }).done(function(result) {
            console.log('DONE')
          }).fail(function() {
            console.log('FAIL')
          });
        } else {
          console.log('INVALID FORMAT');
        }
      });
    });
  </script>
 </head>

 <body style="background: #CCC;">
  <form method="post" action="/">
   <input type="text" name="test" value="Bøtte" style="margin: 20px; font-size: 2rem;">
   <input type="submit" name="submit" name="Submit" style="margin: 20px; font-size: 2rem;">
  </form>
 </body>
</html>

服务器: #进口 进口re 导入json 从flask导入flask,请求,呈现模板,jsonify

# App
app = Flask(__name__)
app.debug = True


# Route: Index
@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        data = {}
        # VALIDATE
        for field in request.form.keys():
            value = request.form[field]

            pattern = '^([A-Za-z\-\.\u00C0-\u00D6\u00D8-\u00f6\u00f8-\u00ff\s]*)$'
            match = re.match(pattern, value)

            data[field] = {
                'value': value,
                'match': True if match else False
            }

        print json.dumps(data, indent=4)

        return jsonify({'foo':'bar'})

    else:
        return render_template('index.html')


# Main
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

Tags: nameformapp客户端dataifvaluetype

热门问题