我试图在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)
可以在JavaScript(see here)和Python(see here)中使用
\xYY
相关问题 更多 >
编程相关推荐